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