叢喜東 魏軍 馮亞男 梁志強(qiáng)
(1 黑龍江省生態(tài)研究所,黑龍江 哈爾濱 1500810;2 自然資源部第三地形測量隊,黑龍江 哈爾濱 150025;3 黑龍江省自然資源權(quán)益調(diào)查監(jiān)測院,黑龍江 哈爾濱 150080)
建設(shè)項目征占用林地的制圖工作是一項操作繁雜的過程,其中地塊排號是制圖的一個重要的基礎(chǔ)步驟。在傳統(tǒng)GIS在排號的過程中,需要加載編輯圖層,對選中的地塊進(jìn)行逐圖斑進(jìn)行添加或修改其屬性信息,在地塊較多的情況下,效率較低,且無法實現(xiàn)走向一致的斑塊的批量排號,也無法實現(xiàn)號碼的自動增加,在排號的過程很容易出現(xiàn)錯漏,需要對錯誤的編號進(jìn)行重新梳理,重新進(jìn)行排號操作,極大地影響工作效率。本文通過綜合分析和梳理建設(shè)項目征占用林地的業(yè)務(wù)流程,研究地塊排號功能實現(xiàn),旨在達(dá)到滿足快速實現(xiàn)排號的目的,有效提高地塊排號的效率。
ArcGIS Engine是美國ESRI公司推出的一套功能完備的嵌入式GIS組件庫和工具庫,用戶可以基于ArcGIS Engine和業(yè)務(wù)工作實際開發(fā)出滿足業(yè)務(wù)需求的GIS軟件系統(tǒng),并可以脫離ArcGIS桌面端而獨立運行[1]。ArcGIS Engine支持多種開發(fā)語言,如C#、JAVA等[2]。包括控件、工具條和對象庫3個關(guān)鍵部分,控件是通過嵌入方式成為GIS程序的用戶界面組成部分;工具條是進(jìn)行地理信息交互的GIS工具集合;對象庫是ArcObject的幾何圖形、GIS數(shù)據(jù)源和Geodatabase的集合[3]。
本系統(tǒng)使用C#作為程序設(shè)計的語言。C#是微軟公司發(fā)布的一種面向?qū)ο蟮?、運行于.NET Framework之上的高級程序設(shè)計語言??梢钥焖俚鼐帉懟贛icrosoft.NET平臺的應(yīng)用程序[4]。.NET框架(.NET Framework)是由微軟開發(fā),致力于敏捷軟件開發(fā)、快速應(yīng)用開發(fā)、平臺無關(guān)性和網(wǎng)絡(luò)透明化的軟件開發(fā)平臺。
空間數(shù)據(jù)庫(Geodatabase)是一種采用標(biāo)準(zhǔn)關(guān)系數(shù)據(jù)庫技術(shù)來表現(xiàn)地理信息的數(shù)據(jù)模型,它支持在標(biāo)準(zhǔn)的數(shù)據(jù)庫管理系統(tǒng)(DBMS)表中存儲和管理地理信息。Geodatabase是地理數(shù)據(jù)的頂層部分,它是數(shù)據(jù)集、要素類、對象類和關(guān)聯(lián)類的集合[5]。在數(shù)據(jù)庫中,通過要素數(shù)據(jù)集、柵格數(shù)據(jù)集和TIN數(shù)據(jù)集三種地理數(shù)據(jù)集來實現(xiàn),其中要素集是具有相同坐標(biāo)系統(tǒng)的要素類的集合。對象類、要素類和要素數(shù)據(jù)集是數(shù)據(jù)庫中的基本組成部分。數(shù)據(jù)庫中創(chuàng)建上述內(nèi)容,可以向數(shù)據(jù)庫中加載數(shù)據(jù),并進(jìn)一步定義數(shù)據(jù)庫的索引、拓?fù)潢P(guān)系,創(chuàng)建子類、幾何網(wǎng)絡(luò)、注釋類、關(guān)系類等。
本文采用個人地理數(shù)據(jù)庫(MDB),便于采用ADO.NET技術(shù)實現(xiàn)數(shù)據(jù)的統(tǒng)計分析。
數(shù)據(jù)庫設(shè)計采用個人地理空間數(shù)據(jù)庫(.mdb),可以通過Microsoft Access軟件進(jìn)行打開,并通過SQL語句進(jìn)行數(shù)據(jù)統(tǒng)計分析。
關(guān)鍵字段包括ID_L(數(shù)值型)、PX_L(數(shù)值型),x_coord(數(shù)值型)、 y_coord(數(shù)值型),分別用于存儲要素唯一值,斑塊排序號碼、要素中心點橫坐標(biāo)、要素中心點縱坐標(biāo)。
系統(tǒng)功能設(shè)計方面,充分考慮到排號功能的完整性和實用性,結(jié)合傳統(tǒng)GIS的功能進(jìn)行功能設(shè)計(圖1)。
圖1 軟件功能結(jié)構(gòu)圖
(1)常規(guī)功能。滿足地理信息系統(tǒng)的數(shù)據(jù)視圖空間要素的顯示操作,實現(xiàn)圖層的放大、縮小、移屏、全屏、上一視圖、下一視圖、選擇、取消選擇等功能。
(2)系統(tǒng)建庫。創(chuàng)建個人地理數(shù)據(jù)庫,用于存儲矢量數(shù)據(jù)。
(3)矢量入庫。將具有空間參考的建設(shè)項目征占用林地圖斑矢量導(dǎo)入到個人地理數(shù)據(jù)庫中。
(4)添加圖層。將數(shù)據(jù)庫中的占地圖層添加到該系統(tǒng)中。
(5)坐標(biāo)核算。自動計算占地圖層的每個要素的中心橫坐標(biāo)X和縱坐標(biāo)Y。
(6)排號操作。通過選擇在走向一致的多個要素(或單個),按照所選要素的中心點的橫縱坐標(biāo)的升降序,進(jìn)行順延排號,并對錯漏的斑塊進(jìn)行號碼修改等。
1) X升序Y升序,按要素從左向右、從上向下的方向進(jìn)行排號;
2) X升序Y降序,按要素從左向右、從下向上的方向進(jìn)行排號;
3) X降序Y升序,按要素從右向左,從上向下的方向進(jìn)行排號;
4) X降序Y降序,按要素從右向左,從下向上的方向進(jìn)行排號;
5) 號碼清除。清除選中要素的號碼,針對排號不符合要求的圖斑,在選擇后進(jìn)行排號清除;
6) 號碼修改。選中需要修改排號的斑塊,按目標(biāo)號進(jìn)行修改操作。
7) 號碼為零。篩選號碼為空或者為零的數(shù)據(jù),并實現(xiàn)選中后定位到相應(yīng)圖斑。
8) 號碼重排。按照已排序的斑塊順序,重新將號碼從1開始累加排號,保證號碼按整數(shù)1進(jìn)行累加排序。
9) 圖層標(biāo)注。按相應(yīng)標(biāo)注字段進(jìn)行圖層標(biāo)注顯示。
10)圖幅生成。根據(jù)占地制圖標(biāo)準(zhǔn)生成圖幅。
11)圖層輸出。將數(shù)據(jù)庫中的圖層輸出矢量。
軟件系統(tǒng)的功能結(jié)構(gòu)圖如下:
本系統(tǒng)數(shù)據(jù)庫以個人地理數(shù)據(jù)庫(MDB)進(jìn)行數(shù)據(jù)存儲,采用C#+ArcGIS Engine組件二次開發(fā)等技術(shù)進(jìn)行系統(tǒng)研發(fā),并實現(xiàn)系統(tǒng)的相應(yīng)功能模塊。
圖2 系統(tǒng)主界面
(1)系統(tǒng)建庫。創(chuàng)建Base.MDB數(shù)據(jù)庫,該數(shù)據(jù)庫為ArcGIS的個人地理數(shù)據(jù)庫,其格式為Microsoft Access的MDB數(shù)據(jù)庫,可以實現(xiàn)空間數(shù)據(jù)和非空間數(shù)據(jù)共同管理,可通過結(jié)構(gòu)化查詢語言(SQL)對數(shù)據(jù)庫中各類數(shù)據(jù)表的查詢、分析、統(tǒng)計、管理等問題。
(2)要素入庫。通過選擇入庫的矢量文件,自動將該矢量文件導(dǎo)入到Base.MDB庫中,入庫后的名稱為“占地面”,便于后續(xù)軟件功能進(jìn)行識別使用。
(3)圖層添加。通過選擇個人地理數(shù)據(jù)庫,將該數(shù)據(jù)庫中的圖層添加到軟件系統(tǒng)中,用于排號操作。
(4)坐標(biāo)核算。在占地面圖層添加字段ID_L、PX_L、X_Coord、Y_Coord四個字段,均為雙精度類型,其中ID_L用于存儲要素ID值,PX_L用于存儲圖斑排號;對圖層中的每個要素進(jìn)行遍歷,計算每個要素的中心點坐標(biāo),存儲在X_Coord和Y_Coord字段中,用于坐標(biāo)排序。
(5)圖層標(biāo)注,選擇對應(yīng)圖層,根據(jù)PX_L字段的值實現(xiàn)標(biāo)注。
(6)要素選擇,通過選擇按鈕,選擇圖面中的欲排號要素,通過其他常規(guī)功能工具縮放或者移動到斑塊位置。
(7)斑塊排號。根據(jù)圖斑走向選擇圖斑,并采用相應(yīng)功能進(jìn)行排序等操作
圖3 排號功能
具體實現(xiàn)方法:
1)選擇加入到軟件系統(tǒng)中的排號圖層;
2)獲取圖層被選中要素,并記錄被選中要素ID_L字段的唯一值,放到臨時列表(List)中;
3)求得被選中要素之外,最大的PX_L字段的值,以此為選中要素進(jìn)行累加1的起始值;
4)被選中要素根據(jù)其走向,選擇的對應(yīng)的“排號”功能,按選中要素的橫縱坐標(biāo)(x_coord,y_coord)進(jìn)行排序,根據(jù)排序結(jié)果,將相應(yīng)要素的PX_L字段的值進(jìn)行累加更新。實現(xiàn)代碼如下:
5)排號清除。對于排號過程中存在的錯誤,通過選中排序存在錯誤的圖斑,可將PX_L的值,統(tǒng)一修改為零,以便于重新進(jìn)行選擇排號;
6)排號修改。重新檢查排號是否正確,當(dāng)某圖斑在排序的過程中,如果對于排號有錯的斑塊,可通過選擇該斑塊,單獨修改該斑塊序號為新序號;
7)排號為零。對存在漏排號的情況進(jìn)行檢查,可顯示漏排號(PX_L為零)的斑塊,單擊列表記錄,可定位到斑塊位置,通過選擇,修改排號功能,修改該地塊編號,當(dāng)編號無法整數(shù)值進(jìn)行修改時,編號可帶小數(shù);
8)重新排序。在保證所有斑塊均有沒有漏排號的情況下,通過“編號重排”功能,按照已經(jīng)排號的順序,從小到大,進(jìn)行從1開始累加排號。
9)圖層標(biāo)注。采用PX_L作為標(biāo)注字段,用于在系統(tǒng)中顯示排號結(jié)果,方便與檢查和修改。
10)圖幅生成。通過設(shè)置圖幅比例尺和制圖頁面寬度,計算圖幅實際地理位置的寬和高,通過占地范圍包絡(luò)線的左下角坐標(biāo)開始,根據(jù)寬和高的值進(jìn)行格網(wǎng)生成,并通過占地范圍篩選生成的格網(wǎng),形成最后的占地圖幅。
圖4 圖幅參數(shù)設(shè)置
圖5 圖幅生成結(jié)果
11)圖層輸出。對Base.mdb數(shù)據(jù)中的占地面和圖幅面以矢量方式輸出,便于與其他地理信息軟件銜接。
本文根據(jù)建設(shè)項目征占用林地業(yè)務(wù)中的制圖生產(chǎn)實際需要,基于C#、ArcGIS Engine等技術(shù),設(shè)計和實現(xiàn)了制圖排號軟件系統(tǒng),該系統(tǒng)通過對排號業(yè)務(wù)進(jìn)行流程規(guī)范化,簡化操作步驟,解決常規(guī)GIS應(yīng)用過程中的低效操作等難題,實現(xiàn)規(guī)范、便捷、高效圖斑排號功能,為建設(shè)項目征占用林地制圖工作提供了一個快速高效的軟件系統(tǒng)。