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