任航科,齊宇
(福建省國土測繪院,福建 廈門 362000)
在福建省某市的近40 km2的1∶500數(shù)字地形圖入庫項(xiàng)目中,其中一個(gè)很重要且工作量很大的工作就是要對(duì)居民地進(jìn)行入庫前的屬性修改。要保證地形圖的房子線條的屬性和房屋層次注記的屬性相吻合,并且執(zhí)行CASS軟件的編組命令后,房屋線條和其對(duì)應(yīng)層次注記等都在同一個(gè)編組內(nèi)。這個(gè)項(xiàng)目房屋的所占的比例達(dá)80%以上,由于前期并未考慮到入庫的要求,新測的圖都是沒有考慮屬性這一塊,作業(yè)過程中直接采取復(fù)制線條或者層次注記等,老圖由于是以前其他軟件內(nèi)業(yè)成圖的,所以房屋的內(nèi)部屬性和入庫標(biāo)準(zhǔn)更不符合了。筆者以CASS軟件為基礎(chǔ),AutoLISP工具為手段,編寫程序?qū)ζ溥M(jìn)行批量處理,實(shí)現(xiàn)了對(duì)房屋屬性進(jìn)行修改并最終達(dá)到了入庫要求。
由于本項(xiàng)目重點(diǎn)在于房子,主要是對(duì)房屋進(jìn)行最后分屬性入庫,所以對(duì)房子的屬性要求很嚴(yán)格,要求房屋的線條屬性要和其對(duì)應(yīng)的房屋注記相對(duì)應(yīng)。房屋編碼采用CASS軟件的內(nèi)部編碼。部分編碼的具體對(duì)應(yīng)要求如表1所示。

房屋內(nèi)部屬性編碼對(duì)應(yīng)關(guān)系 表1

續(xù) 表1
由于房子線條的內(nèi)部編碼以及表示該房屋的結(jié)構(gòu)注記,和樓層注記的編碼都存儲(chǔ)在線條的內(nèi)部擴(kuò)展屬性中。如下面是對(duì)一個(gè)混3的房子線條的CASS內(nèi)部屬性編組。

其中(-3("SOUTH"(1000."141161")(1040.3.0))))這一個(gè)屬性表中的141161代表的就是混房,3.0為房屋樓層注記。其中的(10250.08277.2317)這幾組屬性碼為這個(gè)封閉多邊形的各個(gè)節(jié)點(diǎn)的坐標(biāo)數(shù)據(jù)。
房屋結(jié)構(gòu)注記和樓層注記錄的漢字對(duì)應(yīng)的內(nèi)部編碼組如下:


其中的(1."混")就是該房屋的結(jié)構(gòu)注記組屬性,(1."3")為該房屋的樓層注記組屬性。
不能保證所有的房子都達(dá)到了線條內(nèi)部屬性和圖面注記的相統(tǒng)一。在圖面上有個(gè)別情況,如前期檢查不是很仔細(xì)或者其他原因?qū)е戮用竦刈⒂洸辉诜课菥€條的閉合線以內(nèi),導(dǎo)致利用程序不能提取到相對(duì)應(yīng)的結(jié)構(gòu)注記信息賦值給線條。為了避免這種情況的發(fā)生,保證整個(gè)圖面經(jīng)過處理后的居民地100%的正確。我們可以通過以下兩個(gè)方面進(jìn)行處理。
(1)通過編寫程序檢查線條內(nèi)部是否有對(duì)應(yīng)的注記信息
參考上面房子線條的內(nèi)部屬性編碼組,我們通過其中的((0."LWPOLYLINE")(8."JMD")(100."Ac-DbPolyline")),這幾個(gè)條件的聯(lián)合對(duì)整個(gè)圖面的居民地進(jìn)行搜索,再通過LISP命令提取出房屋線條的每個(gè)端點(diǎn)坐標(biāo),形成一個(gè)點(diǎn)列表。通過這點(diǎn)列表利用LISP的選擇命令來框選其中的文字并形成一個(gè)結(jié)果值,通過判斷結(jié)果值是否為空就可以判斷出是否房屋線條內(nèi)部是否包含文字。對(duì)于閉合線內(nèi)部缺少注記文字的我們通過上面的點(diǎn)列表計(jì)算該房屋閉合線的中心點(diǎn)坐標(biāo),并在該坐標(biāo)上生成點(diǎn)錯(cuò)誤標(biāo)記來達(dá)到檢查的目的。
(2)通過ArcGIS進(jìn)行拓?fù)錂z查
把CASS中的房屋線條導(dǎo)入到ArcGIS中構(gòu)面,再把CASS中的房屋注記信息導(dǎo)入到ArcGIS中轉(zhuǎn)換成點(diǎn),通過點(diǎn)-面拓?fù)湟?guī)則中的“面包含點(diǎn)”和“點(diǎn)在面內(nèi)”生成拓?fù)錂z查文件,再對(duì)照CASS文件進(jìn)行相對(duì)應(yīng)的修改。
通過上面兩個(gè)步驟的結(jié)合應(yīng)用可以保證房屋注記的正確性。
要將房屋線條的屬性同其對(duì)應(yīng)的結(jié)構(gòu)屬性進(jìn)行關(guān)聯(lián)處理,并最終把線條和文字進(jìn)行編組。我們可以通過LISP程序提取房屋線條對(duì)應(yīng)的各個(gè)頂點(diǎn)的坐標(biāo)形成一個(gè)點(diǎn)列表。然后通過這個(gè)點(diǎn)列表利用LISP中的ssget命令來進(jìn)行框選其范圍內(nèi)的結(jié)構(gòu)層次文字信息。通過獲取的結(jié)構(gòu)層次信息來改變房屋線條的內(nèi)部編碼組中對(duì)應(yīng)的結(jié)構(gòu)和樓層注記編碼組,最后通過更新房屋線條的編碼組就可以達(dá)到線條和屬性的相對(duì)應(yīng)。
基于上面的構(gòu)思,為了提取到相對(duì)應(yīng)的房屋結(jié)構(gòu)和樓層注記信息。我們可以先編寫程序?qū)D面上一層以上房屋的層次和樓層注記信息分開顯示,以便于提取和便于程序中對(duì)房屋層次的判斷。如“混2”,這兩個(gè)字分開在圖面上顯示,也就是這兩個(gè)字可以單獨(dú)選擇,不能選擇的時(shí)候是連接在一起的。這個(gè)可以根據(jù)文字的長度來加以分割,一個(gè)漢字的長度是2,我們可以在選中文字后,按其長度取其前兩位即為房屋結(jié)構(gòu)注記,從其長度為3開始取其以后部分即為房屋樓層注記。對(duì)于一層的房屋可以在程序中通過判斷注記的長度來進(jìn)行區(qū)分,如果長度小于等于2則不需要進(jìn)行處理,大于2的才需要進(jìn)行分分開顯示處理。
編寫程序提取房屋線條的內(nèi)部屬性編碼表,提取該房屋線條各頂點(diǎn)坐標(biāo)組成列表,利用這個(gè)坐標(biāo)集來框選該房屋線條內(nèi)部的房屋層次注記內(nèi)容,通過判斷提取到注記信息的個(gè)數(shù)來判斷該房屋是樓層是否大于1層,通過LISP的numberp函數(shù)判斷提取到的注記內(nèi)容是否為數(shù)字來對(duì)結(jié)構(gòu)注記和樓層注記進(jìn)行區(qū)分。根據(jù)提取到的注記內(nèi)容對(duì)房屋線條的內(nèi)部屬性中房屋結(jié)構(gòu)注記和樓層注記的編碼組進(jìn)行重新組合,并對(duì)原編碼組進(jìn)行替換,對(duì)圖元編碼組進(jìn)行更新,最后通過CASS軟件中的重新生成命令來達(dá)到線條內(nèi)部屬性和圖面注記的相互統(tǒng)一以及線條和文字的相互編組。
有的時(shí)候由于注記沒有得到徹底的檢查修改導(dǎo)致個(gè)別的房屋線條沒辦法處理,程序處理的時(shí)候會(huì)越過不處理。所以在主編組程序中可以考慮加入改變顏色的程序代碼行,通過CAD的Change函數(shù)來對(duì)處理過的房屋線條進(jìn)行改變顏色。這樣通過整個(gè)圖面處理過后,可以很方便的通過顏色的區(qū)分來對(duì)沒有處理過的房屋進(jìn)行檢查單獨(dú)處理。
由于文字注記炸開程序和居民地注記檢查程序相對(duì)較為簡單,下來就將房屋編組的部分程序簡單羅列如下:
在整個(gè)圖面中搜索居民地信息,并進(jìn)入循環(huán)進(jìn)行單個(gè)處理。



(1)基礎(chǔ)數(shù)據(jù)準(zhǔn)備
先把需要處理的數(shù)字化地形圖轉(zhuǎn)換到CASS軟件中,除了JMD層外其他層全部刪除掉了。然后就是用編寫的注記檢查命令檢查沒有注記的房屋線條,并進(jìn)行整改處理。接下來把處理好的居民地線條導(dǎo)入到ArcGIS中構(gòu)面,再把居民地注記導(dǎo)入到ArcGIS軟件中轉(zhuǎn)換成點(diǎn),通過 ArcGIS中的“面包含點(diǎn)”和“點(diǎn)在面內(nèi)”對(duì)居民地和注記進(jìn)行拓?fù)涮幚恚鶕?jù)拓?fù)涮幚淼慕Y(jié)果相應(yīng)改正CASS圖件,以保證居民地線條和其對(duì)應(yīng)文字注記相統(tǒng)一。
(2)運(yùn)行房屋層次分割命令,對(duì)JMD層中的房屋結(jié)構(gòu)注記和樓層注記進(jìn)行分割處理,轉(zhuǎn)換后的效果如下:

圖1 轉(zhuǎn)換前文字注記

圖2 轉(zhuǎn)換后文字注記
(3)運(yùn)行居民編組修改的程序?qū)Ψ课菥€條進(jìn)行處理,根據(jù)居民地線條內(nèi)部的居民地注記來修改房屋線條的內(nèi)部屬性編碼,繼而更新整個(gè)居民地線條的內(nèi)部編碼屬性組。
(4)在CASS軟件中利用快速選擇對(duì)JMD層中的文字注記進(jìn)行全部刪除。只留下居民地線條。
(5)利用CASS軟件中的“地物編輯”菜單下的“重新生成”命令對(duì)整個(gè)項(xiàng)目的居民地進(jìn)行重新生成,這樣每個(gè)居民地其對(duì)應(yīng)的文字注記會(huì)根據(jù)其內(nèi)部編碼進(jìn)行自動(dòng)顯示,并且和房物線條在同一個(gè)編組內(nèi)。效果圖如圖3:

圖3 最終處理后的房屋線
按照上面的步驟,通過編寫檢查程序和ArcGIS拓?fù)錂z查兩道工序保證了原始數(shù)據(jù)的質(zhì)量。對(duì)于檢查整改好的數(shù)據(jù)只需要運(yùn)行命令對(duì)其進(jìn)行編組處理,即可輕松的使這個(gè)項(xiàng)目中90%以上的工作得以輕松解決,使得原本單調(diào)乏味的工作變得輕松,不需要再去面對(duì)好幾十萬棟房屋一個(gè)一個(gè)地改過去,因此不僅節(jié)約了時(shí)間,更節(jié)省了人力,物力,財(cái)力,保證了整個(gè)工程的質(zhì)量和進(jìn)度。
[1]黎新懿,趙景亮.用Visual LISP開發(fā)AutoCAD 2004應(yīng)用程序[M].北京:科學(xué)出版社,2003.
[2]周明,董仁揚(yáng).Visual LISP程序設(shè)計(jì)及其應(yīng)用教程[M].上海:上海科學(xué)技術(shù)文獻(xiàn)出版社,2008.
[3]蔣輝,潘慶林,劉三枝.數(shù)字化測圖技術(shù)及應(yīng)用[M].北京:國防工業(yè)出版社,2006.
[4]湯國安,楊昕.ArcGIS地理信息系統(tǒng)空間分析實(shí)驗(yàn)教程[M].北京:科學(xué)出版社,2006.
[5]吳靜,何必,李海濤.ArcGIS 9.3 Desktop地理信息系統(tǒng)應(yīng)用教程[M].北京:清華大學(xué)出版社,2008.