摘 要:說明了地籍調(diào)查與建庫中存在的問題,引入實體擴展屬性的概念,以房屋屬性為例,通過分析CASS數(shù)據(jù)的dxf文件的存儲結(jié)構(gòu),基于VBA巧用南方CASS的實體擴展屬性,設(shè)計程序,通過將獲取的擴展屬性的存儲格式進行轉(zhuǎn)換,實現(xiàn)了將ArcGIS轉(zhuǎn)換成CASS文件的擴展屬性進行拆分,使擴展屬性與單個要素相關(guān)聯(lián),將其轉(zhuǎn)換為CASS標準格式,方便在CASS中查看屬性的功能。
關(guān)鍵詞:CASS 實體擴展屬性 dxf文件 VBA ArcGIS
中圖分類號:TN913文獻標識碼:A文章編號:1674-098X(2012)07(b)-0117-02
地籍調(diào)查與建庫是項相當繁瑣的工作,涉及大量的圖形編輯與屬性錄入[1]。如果直接在ArcGIS中修改會比較復(fù)雜并且耗時,而且ArcGIS操作對作業(yè)人員素質(zhì)要求較高??紤]到CASS具有很強的圖形編輯功能,并能掛接屬性且屬性與圖形能以面向?qū)ο蟮姆绞讲僮鱗2],在變更調(diào)查中容易維護數(shù)據(jù)的邏輯一致性。因此,我們一般是將ArcGIS數(shù)據(jù)轉(zhuǎn)換成CASS數(shù)據(jù)進行修改,可是直接從ArcGIS輸出的CASS數(shù)據(jù),不能查看屬性。經(jīng)過分析認為,從ArcGIS轉(zhuǎn)換得到的數(shù)據(jù),其屬性并沒有丟失,只是存儲的方式和CASS存儲的方式不同。本文基于VBA巧用南方CASS的實體擴展屬性,實現(xiàn)了在CASS中方便查看屬性的功能。
1 技術(shù)路線
CASS中不嚴格區(qū)分要素幾何類型,沒有拓撲關(guān)系。屬性數(shù)據(jù)存儲在單個實體的擴展實體數(shù)據(jù)中。擴展實體數(shù)據(jù)是在常規(guī)的圖形數(shù)據(jù)基礎(chǔ)上增加的按一系列分類代碼組合而成的數(shù)據(jù)塊,它與常規(guī)實體數(shù)據(jù)一起構(gòu)成內(nèi)容更加廣泛的實體數(shù)據(jù)。
CASS格式數(shù)據(jù)的擴展實體數(shù)據(jù)(XData)是存儲在DWG內(nèi)部的要素附加屬性信息。但是擴展屬性是與單個要素關(guān)聯(lián)的,而且是以數(shù)組方式存儲,沒有字段名。因此需要按照CASS相關(guān)的說明,確定各個屬性存儲的位置和種類。
以下都以房屋屬性為例來說明問題。
在CASS里,給實體增加了一個附加屬性,用來對實體本身的屬性作些更多更具體的描述和說明,該屬性可以由用戶根據(jù)實際的需要進行設(shè)置和添加。實體擴展屬性存儲在Attribute.def文件中,使用記事本打開它,將FWJG、FWCS這兩個字段寫入文件中。格式如下:
*RESRGN,3,面狀居民地
FWJG,0,10,0,房屋結(jié)構(gòu)
FWCS,0,10,0,房屋層數(shù)
SOUTH,0,9,0,實體代碼
第一行中RESRGN表示圖層名,數(shù)字3表示圖層類型為面(1表示點、2表示線、3表示面、4表示注記);第二行起每行表示一個屬性:第一項為屬性代碼,第二項為數(shù)據(jù)類型,第三項為數(shù)據(jù)字節(jié)長度,第四項為小數(shù)位數(shù),第五項為文字說明。
1.1 CASS中的房屋擴展屬性表示方法
在CASS軟件中畫一結(jié)構(gòu)為磚和層數(shù)是3層的房屋,查看dxf文件中的擴展屬性值顯示為:
組碼1001表示擴展數(shù)據(jù)的開始,組碼1001下出現(xiàn)的1000和1040為其屬性值,類型分別為字符串型和浮點型。如上第一個開始的數(shù)據(jù)組碼1001的值為SOUTH,它下面有兩個值,一個字符串型141121,一個是浮點型3.0。其中141121是常用的CASS編碼,它存儲于SOUTH下面的第一個字符串中,141121是表示磚房屋線編碼,而浮點型數(shù)據(jù)3.0,即是該房屋的層數(shù)。第二個字段名為FWJG,代表房屋結(jié)構(gòu)的字段名,其下組碼1000的值是磚,即代表此房屋結(jié)構(gòu)為“磚”,最后一個字段名為FWCS,代表房屋層數(shù)的字段名,其下組碼1000的值是3,即代表此房屋層數(shù)為“3”。
1.2 從ArcGIS中轉(zhuǎn)換出的房屋屬性表示方法
ArcGIS要素屬性值全部在.dbf文件中,字段類型有字符串型、整型、浮點型、邏輯型和日期型之分。每一字段又有長度和精度的概念,每一個屬性結(jié)構(gòu)即對應(yīng)一種shp文件,每一個屬性結(jié)構(gòu)里面關(guān)于字段名、字段類型、長度、精度都有說明。
在ArcGIS中,新建shp文件畫一矩形,并在屬性表中建立如下字段SOUTH、FWJG和FWCS。如:要顯示一個結(jié)構(gòu)為磚和層數(shù)是3層的房屋。
將shp數(shù)據(jù)用Data Interoperability toolsQuick ExportSettingsExtended EntityData工具輸出。打開從ArcGIS轉(zhuǎn)換成的CASS文件,察看dxf文件中的擴展屬性值顯示為:
組碼1001表示擴展數(shù)據(jù)的開始,緊隨組碼1001下出現(xiàn)的1000為其屬性值,如上第一個開始的數(shù)據(jù)組碼1001的值為ACAD,它下面有三個值,都為字符串型,分別是:FWCS=3,F(xiàn)WJG=磚和SOUTH=141121。以上擴展屬性沒有與單個要素關(guān)聯(lián),所以不能在CASS中查看擴展屬性。
對比dxf文件中的擴展屬性,可以發(fā)現(xiàn)從ArcGIS轉(zhuǎn)換成CASS文件的擴展屬性并沒有丟失,只是存儲的方式發(fā)生了變化。如果想要將擴展屬性值在CASS中方便查看,只要將存儲的方式轉(zhuǎn)變?yōu)镃ASS標準格式即可。
2 程序?qū)崿F(xiàn)和關(guān)鍵技術(shù)
在CASS中,實體擴展屬性數(shù)據(jù)可存儲地物編碼和大量的屬性信息。將擴展屬性與圖形對象緊密地結(jié)合在一起,有利于圖形和屬性的一體化操作,并且能維護數(shù)據(jù)的邏輯一致性。CASS中可以采用SetXData和GetXData的方法實現(xiàn)對對象(Object)實體擴展屬性的寫入和讀出。
程序的核心代碼如下:
該程序通過將獲取的擴展屬性的存儲格式進行轉(zhuǎn)換,將ArcGIS轉(zhuǎn)換成CASS文件的擴展屬性進行拆分,使擴展屬性與單個要素相關(guān)聯(lián),將其轉(zhuǎn)換為CASS的標準格式。
加載該程序?qū)ζ渚幾g得到:
組碼1001表示擴展數(shù)據(jù)的開始,緊隨組碼1001下出現(xiàn)的1000為其屬性值,如上第一個開始的數(shù)據(jù)組碼1001的值為ACAD,它下面有三個值,都為字符串型,分別是:SOUTH=141121,F(xiàn)WJG=磚和FWCS=3。第二個字段名為FWJG,代表房屋結(jié)構(gòu),其下組碼1000的值是磚,即代表此房屋結(jié)構(gòu)為“磚”,第三個字段名為FWCS,其下組碼1000的值是3,即代表此房屋層數(shù)為“3”。最后一個字段名為SOUTH,其下組碼1000的值是141121,即代表此房屋的房屋線編碼。
在CASS中查看屬性,
3 結(jié)語
本文基于VBA平臺巧用南方CASS的實體擴展屬性,實現(xiàn)了將ArcGIS轉(zhuǎn)換成CASS文件的擴展屬性進行拆分,使擴展屬性與單個要素相關(guān)聯(lián),將其轉(zhuǎn)換為CASS標準格式,方便在CASS中查看屬性的功能。目前,該程序已經(jīng)成功應(yīng)用于生產(chǎn),給作業(yè)人員帶來很大的方便,大大提高了生產(chǎn)效率,而且不僅適用于面狀元素,對點狀、線狀也同樣適用。
參考文獻
[1]張雪松,張友安,鄧敏.AutoCAD環(huán)境中組織GIS數(shù)據(jù)的方法[J].測繪通報,2003(11):45-48.
[2]CASS7.0數(shù)字化地形地籍成圖系統(tǒng)參考手冊[Z].廣州:南方測繪儀器公司.
[3]申勝利,李華.基于ArcEngine的ArcGIS與AutoCAD數(shù)據(jù)轉(zhuǎn)換研究[J].測繪通報,2007(2):41-43.
[4]曾憲珪,徐昌榮.基于AutoCAD的數(shù)字地形圖屬性數(shù)據(jù)組織方案[J].測繪通報,2005(2):29-31.
[5]郭朝勇.AutoCAD 2002定制與開發(fā)[M].北京:清華大學出版社,2002.
[6]劉希雙,潘奕,王林,解析CASS擴展屬性數(shù)據(jù)[J].測繪與空間地理信息,2009(12):182-183.
[7]文學東,鐘文軍.基于Geodatabase的CAD到ArcGIS數(shù)據(jù)入庫研究[J].測繪科學,2006(6):100-102.