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