劉宓,舒濱,楊釗
(天津市測繪院,天津 300381)
基于Map3D的規(guī)劃圖斑數(shù)據(jù)轉(zhuǎn)換為系統(tǒng)數(shù)據(jù)的方法
劉宓?,舒濱,楊釗
(天津市測繪院,天津 300381)
規(guī)劃數(shù)據(jù)中的圖斑多是以AutoCAD中的填充對象(Hatch)來表示的,這些填充對象無法直接轉(zhuǎn)換為shp數(shù)據(jù)。本文討論了基于Map3D平臺將規(guī)劃圖斑數(shù)據(jù)轉(zhuǎn)換為shp的方法,并對轉(zhuǎn)換過程中出現(xiàn)的各種問題提出了相應(yīng)的解決辦法。
Map3D;GIS;規(guī)劃圖斑;Shapefile
我們在為規(guī)劃部門開發(fā)GIS平臺過程中,需要將很多規(guī)劃圖斑類的數(shù)據(jù)轉(zhuǎn)換為shp數(shù)據(jù),如土地細(xì)分導(dǎo)則數(shù)據(jù)。規(guī)劃圖斑要素一般都是在AutoCAD軟件中以填充面(Hatch)來表示的,而Hatch填充對象無法直接轉(zhuǎn)換為shp數(shù)據(jù),并且組成Hatch對象的情況非常復(fù)雜,幾乎本文詳細(xì)討論了在Map3D軟件平臺下,通過二次開發(fā)應(yīng)用程序,實(shí)現(xiàn)填充對象轉(zhuǎn)換為shp數(shù)據(jù)的流程和方法。
2.1工具選擇
由于規(guī)劃圖斑數(shù)據(jù)是DWG格式的,所以我們選擇AutoCAD Map3D軟件來處理,它能直接操作DWG文件。在轉(zhuǎn)換過程中,可以實(shí)時的呈現(xiàn)每一步驟的轉(zhuǎn)換結(jié)果,存在數(shù)據(jù)錯誤時,用戶可以方便地修改。
Map3D軟件包含AutoCAD的所有功能,同時還集成了很多GIS的功能,通過它可以將DWG數(shù)據(jù)中的點(diǎn)、線、面等要素直接轉(zhuǎn)換成shp數(shù)據(jù),不需要再借助其他的GIS平臺生成shp數(shù)據(jù)了,這是我們選擇Map3D的一個原因。此外,另一個重要的原因是,對于包含弧段的多段線和面,也能夠完美地轉(zhuǎn)換到shp,這無疑幫我們解決了一個重要的問題,我們不用再考慮圓弧加密的問題了。
2.2轉(zhuǎn)換方法
規(guī)劃圖斑數(shù)據(jù)主要由兩部分組成:面狀圖斑、圖斑內(nèi)部屬性點(diǎn)。其中屬性點(diǎn)一般用多行文件(MTEXT)或?qū)傩詨K來表示,所以在轉(zhuǎn)換時需要對這兩部分分別考慮。
轉(zhuǎn)換面狀圖斑的方法為:先獲取圖斑邊線,然后拼接成閉合邊線,再將閉合邊線創(chuàng)建成MPOLYGON對象,最后用Map3D的MAPEXPORT命令就可以將MPOLYGON輸出為面狀shp數(shù)據(jù)。
轉(zhuǎn)換屬性點(diǎn)的方法為:先將地塊編號、用地代碼、用地面積、容積率等屬性信息創(chuàng)建對象數(shù)據(jù)并附著到屬性點(diǎn)上,然后用MAPEXPORT命令將屬性點(diǎn)輸出為點(diǎn)狀shp數(shù)據(jù)。
最后,使用DotSpatial組件或者ArcGIS中的空間連接工具處理點(diǎn)、面的shp數(shù)據(jù),通過空間包含關(guān)系將點(diǎn)的屬性關(guān)聯(lián)到面上去。
2.3轉(zhuǎn)換流程
轉(zhuǎn)換流程,如圖1所示,其中,拼接邊界線、創(chuàng)建MPOLYGON和創(chuàng)建對象數(shù)據(jù)是轉(zhuǎn)換的關(guān)鍵環(huán)節(jié)。
圖1 規(guī)劃圖斑轉(zhuǎn)shp流程圖
3.1圖形清理
只保留圖中的圖斑填充和屬性點(diǎn),刪除其他所有對象。因?yàn)橹亟ㄌ畛溥吔缇€時,有時會生成很多零散的線,然后再對這些新生成的線進(jìn)行拼接。為了避免與原圖中的線沖突,所以先刪除所有不參與轉(zhuǎn)換的對象。
3.2重建填充邊界
通過hatchedit命令,可以獲取構(gòu)建Hatch填充對象的所有邊界線。重建后的邊界線可能存在兩種情況:
(1)對于比較規(guī)范的填充面,重建邊界后可以獲得閉合的線;
(2)對于比較復(fù)雜的填充面,重建邊界后可能會生成很多零散的直線、圓弧、樣條曲線等。
3.3拼接邊界線
如果新生成的邊界線中存在不閉合的線,就要進(jìn)行拼接操作。拼接操作主要通過AutoCAD中的PEDIT、JOIN命令來完成。自定義拼接函數(shù)結(jié)構(gòu)如下:
(defun Hatch2Shp_PJ(ss loops/)...)
函數(shù)接收兩個參數(shù),ss表示一個Hatch對象生成的邊線集合,loops表示該Hatch對象中環(huán)的個數(shù)。如果函數(shù)運(yùn)行成功,返回閉合多邊形的集合,否則返回nil。
需要注意的是,自定義的拼接函數(shù)中必須對返回值的條件進(jìn)行嚴(yán)格地控制:
只有當(dāng)拼接完成后,拼接后的線全部構(gòu)成閉合多邊形,而且總數(shù)與loops相等時,才能返回拼接結(jié)果,其他任何情況都應(yīng)該返回nil,即表示拼接不成功。此時,需要將拼接的中間成果放置到特定的層,讓用戶去檢查、修改邊線中的錯誤。
如果我們對拼接函數(shù)的返回結(jié)果不控制,不判斷返回值,那么在創(chuàng)建MPOLYGON對象時,可能創(chuàng)建不成功,或者創(chuàng)建的是完全錯誤的MPOLYGON。例如,當(dāng)遇島狀的Hatch,由多個環(huán)組成,拼接邊線時,如果只拼接成功了外環(huán)或者個別內(nèi)環(huán),那么創(chuàng)建出來的MPOLYGON是完全錯誤的。
拼接算法的實(shí)現(xiàn)過程如下:
拼接時的一個重要的原則是:最大限度地拼接將每個填充面(Hatch)生成的邊線。這會給后續(xù)的用戶檢核工作帶來極大的便利。
在我們設(shè)計(jì)的轉(zhuǎn)換流程中,當(dāng)不能正確拼接、不能創(chuàng)建MPOLYGON時,我們采取的方式是將邊線放置到特定的層讓用戶去檢查修改邊線。這種情況下,如果當(dāng)兩個或多個相鄰的Hatch面都不規(guī)范,且生成的邊線比較瑣碎的時候,就很難區(qū)分各個瑣碎邊線的歸屬,不知道這些互相疊壓的邊線是哪個面生成的,這就給用戶的修改工作造成極大的麻煩。
所以我們用pedit命令拼接后,又用join命令進(jìn)行更進(jìn)一步的拼接。
3.4創(chuàng)建MPOLYGON
通過MPOLYGON命令,可以將閉合的多段線創(chuàng)建成MPOLYGON對象,但是對于數(shù)據(jù)質(zhì)量有嚴(yán)格的要求:多段線上不能有重點(diǎn)、不能有折回、不能自相交。所以需要檢查MPOLYGON對象是否創(chuàng)建成功,如果創(chuàng)建不成功,需要將邊界線添加標(biāo)記或放到特定的圖層,讓用戶去檢查數(shù)據(jù)問題,修正后再重新創(chuàng)建。自定義創(chuàng)建MPOLYGON的函數(shù)結(jié)構(gòu)如下:
(defun Hatch2Shp_MK_MPOLYGON(ss/)...)
參數(shù)ss表示閉合多段線的選擇集。如果函數(shù)運(yùn)行成功,返回新創(chuàng)建的MPOLYGON對象,否則返回nil。
創(chuàng)建MPOLYGON對象以及判斷是否創(chuàng)建成功的方法為:
首先,在創(chuàng)建MPOLYGON對象之前,用(ssget"X")獲取當(dāng)前圖中的所有對象;然后創(chuàng)建MPOLYGON對象;再用entlast函數(shù)獲取當(dāng)前圖中的最后一個實(shí)體;最后用(ssmemb en ss_all)判斷en是否在原始圖中存在,如果不存在,就說明en是最新生成的實(shí)體,再判斷en的類型是否為MPOLYGON,如果是就說明創(chuàng)建成功了。
3.5輸出面狀shp
通過MAPEXPORT命令可以直接將MPOLYGON對象輸出為shp數(shù)據(jù)。
3.6創(chuàng)建對象數(shù)據(jù)
在規(guī)劃圖斑數(shù)據(jù)中,屬性點(diǎn)一般用屬性塊或多行文本來表示,其中包含了地塊編號、用地代碼等信息,如圖2所示:
圖2 屬性數(shù)據(jù)示例
創(chuàng)建對象數(shù)據(jù)的步驟:
(1)創(chuàng)建對象數(shù)據(jù)表。Map3D中的對象數(shù)據(jù)表相當(dāng)于shp中的DBF數(shù)據(jù)庫表,LISP語言中通過ade_ oddefinetab函數(shù)來定義,方法如下:
定義時,必須指定表的名稱(tablename)、說明(tabledesc)和字段列表;定義字段列表時,必須指定每個字段的名稱(colname)、說明(coldesc)、類型(coltype)和默認(rèn)值(defaultval)。字段類型共有四種,分別為:整型(integer)、字符型(character)、點(diǎn)(point)、實(shí)型(real)。
(2)附著對象數(shù)據(jù)。定義完對象數(shù)據(jù)表之后,僅僅是在圖形環(huán)境中定義了一個屬性結(jié)構(gòu),還沒有與具體的對象相關(guān)聯(lián)。我們需要先把對象與對象數(shù)據(jù)表關(guān)聯(lián),關(guān)聯(lián)之后,表中的每個字段就相當(dāng)于對象的屬性了,然后再為每個字段賦值。自定義添加對象數(shù)據(jù)的函數(shù)結(jié)構(gòu)為:
函數(shù)set_field接收四個參數(shù):對象名為ENAME類型;表名即對象數(shù)據(jù)表的名稱;字段名是指上一步驟中定義的字段名稱,如“地塊編號”等;字段值的類型要與定義字段時的類型(coltype)一致。函數(shù)的實(shí)現(xiàn)過程為:
3.7輸出點(diǎn)狀shp
用MAPEXPORT命令可以將屬性點(diǎn)直接輸出為shp,輸出方法如圖2所示。如果屬性點(diǎn)是符號塊(INSERT)或點(diǎn)(POINT),對象類型選擇“點(diǎn)”,如果是文本(TEXT或MTEXT),對象類型選擇“文本”。為了輸出對象數(shù)據(jù),需要在“數(shù)據(jù)”標(biāo)簽頁中選擇屬性,然后選擇已經(jīng)定義的對象數(shù)據(jù)表,如圖3所示:
圖3 輸出對象數(shù)據(jù)
3.8空間連接
將圖斑面和屬性點(diǎn)都輸出為shp后,可以通過多種方法將點(diǎn)的屬性復(fù)制到面上。
方法一:通過ArcToolbox中的“空間連接”工具很方便地實(shí)現(xiàn)屬性的復(fù)制;
方法二:通過DotSpatial等GIS組件來實(shí)現(xiàn)。實(shí)現(xiàn)方法如下所示:
本文討論了DWG格式的規(guī)劃圖斑數(shù)據(jù)轉(zhuǎn)換為shp數(shù)據(jù)的流程和方法,對轉(zhuǎn)換過程中重要技術(shù)環(huán)節(jié)的處理給出了詳細(xì)的解決方案。
筆者認(rèn)為,在DWG格式數(shù)據(jù)中,用Hatch填充面來表示面狀規(guī)劃圖斑并不是最理想的表達(dá)方式,因?yàn)镠atch對象的創(chuàng)建相對比較自由,生成Hatch的過程中不會檢查懸掛線、自相交、折回線等,只要存在閉合的路徑就能創(chuàng)建,如圖4所示。
正如前文所討論的,MPOLYGON對象可以直接轉(zhuǎn)換為面狀的shp,因?yàn)镸POLYGON是規(guī)范的多邊形,創(chuàng)建時它會對邊線是否存在重疊點(diǎn)、自相交、折回等進(jìn)行嚴(yán)格地檢核,所以MPOLYGON相對于Hatch而言,是更科學(xué)的表達(dá)面狀圖斑的方式。
圖4 Hatch的缺點(diǎn)
[1] 齊占開.基于Autodesk Map 3D數(shù)字制圖系統(tǒng)符號庫設(shè)計(jì)[J].礦山測量,2014(2):8~9.
[2] 周麗珠,周奎,周義軍.基于CAD數(shù)據(jù)的GIS化處理過程的研究與應(yīng)用[J].城市勘測,2013(5):23~25.
[3] 王婷麗.基于ArcGIS的規(guī)劃數(shù)據(jù)格式轉(zhuǎn)換研究[J].江西理工大學(xué)學(xué)報,2013(1):51~54.
[4] 謝祖明.基于CAD數(shù)據(jù)生產(chǎn)ArcGIS制圖數(shù)據(jù)的研究與應(yīng)用[J].測繪與空間地理信息,2012(8):121~123.
[5] 周麗珠,劉富東,周義軍等.基于關(guān)系探測聚類的圖形自動接邊算法[J].城市勘測,2012(6):126~129.
[6] 譚清華,張明.基于DWG文件的圖形轉(zhuǎn)換方法與程序?qū)崿F(xiàn)[J].城市勘測,2012(4):125~127.
[7] 王光昇,周麗珠,劉允等.基于AutoCAD自定義實(shí)體的初步研究[J].城市勘測,2012(2):134~137.
[8] 周義軍,劉小飛,舒濱等.基于規(guī)則和模板的CAD到GIS數(shù)據(jù)轉(zhuǎn)換[J].城市勘測,2012(1):81~83.
[9] 劉仁義,劉南.ArcGIS開發(fā)寶典——從入門到精通[M].北京:科學(xué)出版社,2009.
The Method of Urban Planning Polygon Data Convert to GIS Data Based on Map3D
Liu Mi,Shu Bin,Yang Zhao
(Tianjin Institute of Surveying and Mapping,Tianjin 300381,China)
At current,the urban planning polygon data is represented by the filling object(Hatch)of AutoCAD.The filling objects cannot be converted directly to SHP data.This paper discusses the method of urban planning polygon data convert to GIS data based on Map3D and gives the corresponding solutions for the problems of conversion.
Map3D;GIS;urban planning polygon;shapefile
1672-8262(2016)01-122-04
P208.1
B
?2015—09—17
劉宓(1979—),女,高級工程師,注冊測繪師,主要從事地理信息數(shù)據(jù)制作處理等工作。