亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        Shapefile與CAD圖形屬性數(shù)據(jù)相互轉(zhuǎn)換方法研究

        2021-10-27 07:00:44劉凱程胡雋杉
        關(guān)鍵詞:圖元屬性數(shù)據(jù)宗地

        劉凱程 胡雋杉

        (1.東莞市測(cè)繪院,廣東 東莞 523000;2.漯河市土地與房屋勘查測(cè)繪隊(duì),河南 漯河 462000)

        0 引言

        Shapefile文件的屬性數(shù)據(jù)存儲(chǔ)在與其根名相同的dbf文件中,CAD文件可以將圖元對(duì)象的屬性信息附加到與其關(guān)聯(lián)的擴(kuò)展數(shù)據(jù) (XData)中。在ArcGIS中,可以直接在圖層中添加CAD數(shù)據(jù),也可以將Shapefile圖形數(shù)據(jù)導(dǎo)出至CAD,但兩者之間不能直接進(jìn)行屬性數(shù)據(jù)的轉(zhuǎn)換。該文通過(guò)對(duì)Shapefile文件屬性列表中的關(guān)鍵詞段(數(shù)據(jù)類型為對(duì)象ID)和CAD圖形中圖元的對(duì)象ID(ObjectID)的對(duì)照研究,找出了二者之間的關(guān)聯(lián),進(jìn)而使其屬性數(shù)據(jù)能夠進(jìn)行相互轉(zhuǎn)換。

        1 Shapefile圖形的對(duì)象ID與CAD圖元的ObjectID對(duì)比分析

        1.1 CAD圖形的屬性信息及擴(kuò)展數(shù)據(jù)

        為了試驗(yàn)和驗(yàn)證,該文結(jié)合“TEST宗地圖 .dwg”文件的CAD 樣予以說(shuō)明。該文件中的宗地圖用CASS軟件繪制,已經(jīng)添加了宗地號(hào)、權(quán)利人和地類號(hào)等屬性數(shù)據(jù)。為了試驗(yàn)方便,刪除了除界址線之外的所有圖元。實(shí)際上,CASS的宗地屬性數(shù)據(jù)就是附加在宗地圖形上的擴(kuò)展數(shù)據(jù),其中最基本的屬性數(shù)據(jù)存放在“SOUTH”應(yīng)用下。

        為了進(jìn)行查驗(yàn)分析,用CAD自帶的VBA開(kāi)發(fā)工具編寫一個(gè)宏“ElementInfo()”用來(lái)查詢圖元信息及擴(kuò)展數(shù)據(jù)。該宏通過(guò)訪問(wèn)圖元的ObjectID屬性來(lái)獲取其對(duì)象ID,通過(guò)調(diào)用圖元的GetXData方法來(lái)獲取其擴(kuò)展數(shù)據(jù),最后調(diào)用MsgBox()函數(shù)顯示上述數(shù)據(jù)。

        在CAD中打開(kāi)文件“TEST宗地圖.dwg”,運(yùn)行宏ElementInfo(),選擇圖中的1個(gè)宗地界址線,將會(huì)彈出1個(gè)信息窗顯示該宗地的圖元對(duì)象ID及宗地屬性(圖1)。

        圖1 CASS軟件宗地界址線的擴(kuò)展數(shù)據(jù)

        第一行為該宗地的圖元對(duì)象ID值,數(shù)據(jù)類型為長(zhǎng)整數(shù)(Long),在VBA中可通過(guò)訪問(wèn)圖形對(duì)象的ObjectID屬性獲取。第2行之后為擴(kuò)展數(shù)據(jù)的組碼值類型和值,其中組碼值類型“1001” 為擴(kuò)展數(shù)據(jù)的注冊(cè)應(yīng)用名,“1000” 為擴(kuò)展數(shù)據(jù)中的ASCII 字符串,在VBA中可用GetXData方法將它們讀取到數(shù)組xtypeOut和xdataOut中。可以看出,xdataOut(0)= “SOUTH”,是CASS軟件定義的一個(gè)應(yīng)用名,宗地的基本屬性數(shù)據(jù)存放在該應(yīng)用下;xdataOut(1)= “300000”是CASS軟件內(nèi)部識(shí)別宗地圖元的特殊標(biāo)志;xdataOut(2)為宗地編號(hào),xdataOut(3)為權(quán)利人,xdataOut(4)為地類編碼[1]。

        根據(jù)上述分析,可以編寫一段程序代碼將圖形中所有圖元的屬性信息及擴(kuò)展數(shù)據(jù)讀取出來(lái),生成1個(gè)Excel表。在ArcGIS中,可以將該表與該CAD文件轉(zhuǎn)換的Shapefile文件屬性表相連接,進(jìn)而實(shí)現(xiàn)二者屬性數(shù)據(jù)的轉(zhuǎn)換[2]。

        1.2 讀取CAD屬性生成Excel表

        上面已經(jīng)介紹,在VBA中可用CAD元的ObjectID屬性 和GetXData方法讀取對(duì)象ID和擴(kuò)展數(shù)據(jù),為了在ArcGIS中與Shapefile屬性表相連接,需要將CAD圖形文件中所有的圖元信息全部讀取出來(lái)。為此,可以通過(guò)編寫宏“ExportXData()”來(lái)實(shí)現(xiàn)。該宏首先啟動(dòng)Excel并創(chuàng)建一個(gè)工作薄,然后讀取CAD模型空間內(nèi)所有圖元的指定屬性和擴(kuò)展數(shù)據(jù),將其添加到第一個(gè)工作表,同時(shí)按讀取順序在第一列生成一個(gè)由0開(kāi)始的序號(hào)。將該工作薄保存為“TEST宗地屬性表.xls”(圖2)。

        圖2 CAD導(dǎo)出的宗地屬性表

        在1個(gè)CAD文件中,各圖元的對(duì)象ID(ObjectID)和句柄(Handle)都是唯一的,對(duì)象ID 和唯一的句柄是引用對(duì)象的2個(gè)途徑。ObjectID值是十進(jìn)制整數(shù),是按照?qǐng)D元?jiǎng)?chuàng)建的順序由小到大生成的。Handle值十六進(jìn)制字符串,轉(zhuǎn)換為十進(jìn)制整數(shù)后也是由小到大的順序。該文采用ObjectID引用對(duì)象[3]。

        與Shapefile文件不同,CAD圖元的對(duì)象ID是不連續(xù)的整數(shù),為與Shapefile屬性表相關(guān)聯(lián),需要在CAD導(dǎo)出的Excel表中設(shè)置1個(gè)充當(dāng)主關(guān)鍵詞的字段,在該字段中按照ObjectID由小到大的順序確定主關(guān)鍵詞段的值:第一條記錄為0,第n條記錄為n-1。

        該文實(shí)驗(yàn)數(shù)據(jù)中的主關(guān)鍵詞段名為“FID”,確定CAD圖元的“FID”字段值有2種方法。

        方法1:將所有圖元對(duì)象加入一個(gè)選擇集(SelectionSet)中,通過(guò)遍歷該選擇集的辦法將ObjectID和其他擴(kuò)展數(shù)據(jù)導(dǎo)出為Excel表,按照ObjectID的升序進(jìn)行排序,將第一條記錄的FID值賦為0,以后各行依次+1即可。也可以在遍歷選擇集時(shí)采用倒序的方法,這樣導(dǎo)出的順序便是ObjectID由小到大的順序,就不用再排序了。

        方法2:CAD的ModelSpace圖元集對(duì)象中包括了圖形中所有的圖元,圖元在ModelSpace中的排列順序就是ObjectID值由小到大的順序。因此,只需按順序遍歷ModelSpace,將圖元的ObjectID和其他擴(kuò)展數(shù)據(jù)導(dǎo)出到Excel表,同時(shí)將第一條記錄的FID值賦為0,以后各行依次+1即可。該文中的宏“ExportXData”采用的就是該方法[4]。

        1.3 Shapefile文件屬性表

        啟動(dòng)ArcMap,新建空白地圖,把CAD樣該文件“TEST宗地圖.dwg”添加進(jìn)圖層。將面圖層“TEST宗地圖.dwg Polygon”導(dǎo)出為Shapefile文件“TEST宗地圖.shp”并添加進(jìn)來(lái)。打開(kāi)“TEST宗地圖”圖層的屬性表,添加一個(gè)用于計(jì)算面積的字段“Area”進(jìn)行對(duì)比分析,數(shù)據(jù)類型選“雙精度型”,用“幾何計(jì)算”功能計(jì)算該出字段的面積值(圖3)。

        對(duì)照?qǐng)D2和圖3中的面積字段“Area”可以看出,CAD導(dǎo)出的“TEST宗地屬性表.xls”和ArcGIS中的“TEST宗地圖”屬性表所關(guān)聯(lián)圖元的排列順序是一致的,主關(guān)鍵詞“FID”也完全相同。這樣,在ArcGIS中就可以根據(jù)主關(guān)鍵詞將這2個(gè)屬性表連接起來(lái)。

        圖3 ArcGIS中的宗地屬性表

        2 CAD到Shapefile的屬性轉(zhuǎn)換

        2.1 將Excel連接到Shapefile屬性表

        將從CAD導(dǎo)出的Excel表添加到ArcGIS,然后用主關(guān)鍵詞段將其與Shapefile文件的屬性表進(jìn)行連接,具體操作如下。

        在ArcGIS的圖層中添加“TEST宗地屬性表.xls”,添加時(shí)選擇第一個(gè)工作表“Sheet1$”。 在“TEST宗地圖”圖層上點(diǎn)擊右鍵,在彈出的下拉式菜單中點(diǎn)擊“連接和關(guān)聯(lián)”,接著點(diǎn)擊“連接…”。在彈出的“連接數(shù)據(jù)”對(duì)話框中“1.選擇該圖層中連接將基于的字段”選“FID”, “2.選擇此表中要作為連接基礎(chǔ)的字段”也選“FID”,其余選項(xiàng)取默認(rèn)值,點(diǎn)擊“確定”按鈕。

        打開(kāi)“TEST宗地圖”圖層的屬性表,可以看出2個(gè)屬性表已經(jīng)連接起來(lái)了。

        2.2 將被連接的CAD屬性加入Shapefile屬性表

        將表“Sheet1$”中的宗地字段加入“TEST宗地圖.shp”文件的屬性中,可以采用如下3種方法。

        方法1:在連接后的屬性表中添加需要加進(jìn)來(lái)的字段,定義好字段名和數(shù)據(jù)類型,然后利用字段計(jì)算器把“Sheet1$”中對(duì)應(yīng)的字段抄錄過(guò)來(lái)。

        方法2:將連接后的屬性表導(dǎo)出為一個(gè)新的dbf文件,移除 “TEST宗地圖”圖層,在文件夾中刪除“TEST宗地圖.dbf”文件,將導(dǎo)出的dbf文件重命名為“TEST宗地圖.dbf”,最后在ArcGIS圖層中重新添加“TEST宗地圖.shp”。

        方法3:將連接屬性后的“TEST宗地圖.shp”導(dǎo)出為1個(gè)新的Shapefile文件并添加到ArcGIS圖層中,移除 “TEST宗地圖”圖層,在文件夾中刪除根名為“TEST宗地圖”的所有文件,將導(dǎo)出的Shapefile系列文件的根名批量重命名為“TEST宗地圖”。

        最后,打開(kāi)屬性表,刪除掉不需要的字段。通過(guò)上述操作,就可以將CAD圖形的屬性和擴(kuò)展數(shù)據(jù)轉(zhuǎn)換為Shapefile文件的屬性表。

        3 Shapefile到CAD的屬性轉(zhuǎn)換

        3.1 Shapefile文件預(yù)處理

        3.1.1 確保Shapefile的dbf文件為ANSI編碼

        有時(shí),Shapefile文件的dbf屬性表用Excel打開(kāi)后中文會(huì)顯示為亂碼,這是因?yàn)镾hapefile文件不是ANSI格式??赏ㄟ^(guò)修改Windows注冊(cè)表解決該問(wèn)題。

        打開(kāi)注冊(cè)表編輯器,定位到HKEY_CURRENT_USERSoftwareESRIDesktop 10.8(根據(jù)實(shí)際安裝的版本而定)。新建 “Common”項(xiàng),在其下再新建“CodePage”項(xiàng),新建字符串值,名稱為“dbfDefault”,健值為“ANSI”。 重新導(dǎo)出Shapefile文件,打開(kāi)dbf文件就顯示正常了。導(dǎo)出后還要在注冊(cè)表中把“dbfDefault”的健值改為“UTF-8”,否則在ArcMap中打開(kāi)的Shapefile文件屬性表的中文又變成了亂碼。

        3.1.2 確保導(dǎo)出的CAD圖形為多段線

        在ArcGIS中,由添加的CAD文件導(dǎo)出的Shapefile文件屬性表“Shape”字段中會(huì)包括“ZM”值,Z值是高程屬性,M值是其他屬性。包括“ZM”值的Shapefile文件導(dǎo)出為CAD后,線和面變成了三維多段線。三維多段線沒(méi)有面積屬性,多數(shù)情況下還需要將其變?yōu)槎喽尉€。CAD中沒(méi)有直接將三維多段線轉(zhuǎn)為多段線的工具,需要在轉(zhuǎn)換前將Shapefile圖形的“ZM”值去除掉。具體操作如下:1) 點(diǎn)擊主菜單“地理處理”,打開(kāi)“ArcToolbox”工具箱,依次展開(kāi)“數(shù)據(jù)管理工具”、“要素”,打開(kāi)“復(fù)制要素”對(duì)話框。2) 在“輸入要素”組合框中選擇原Shapefile文件,在“輸出要素”文本框輸入目標(biāo)Shapefile文件位置和名,點(diǎn)擊“環(huán)境…”按鈕,打開(kāi)“環(huán)境設(shè)置” 對(duì)話框。3) 將“輸出包括M值”和“輸出包括Z值”均設(shè)置為“Disabled”, 點(diǎn)擊“確定”按鈕。

        返回“復(fù)制要素”對(duì)話框中點(diǎn)擊“確定”按鈕。

        3.2 CAD屬性數(shù)據(jù)的存儲(chǔ)模式

        在ArcGIS中,Shapefile文件導(dǎo)出的CAD圖形并沒(méi)有包括圖元所關(guān)聯(lián)的屬性數(shù)據(jù)。

        可以采取如下2種模式存儲(chǔ)CAD屬性數(shù)據(jù):1) 用ADO建立CAD與外部數(shù)據(jù)庫(kù)dbf表的連接。但這種連接在CAD存儲(chǔ)位置發(fā)生改變時(shí)會(huì)失效,須重新設(shè)置連接的數(shù)據(jù)源。2) 直接將屬性信息存儲(chǔ)在CAD圖元的擴(kuò)展數(shù)據(jù)中。在這種模式中,屬性信息是附加在CAD圖元上的,是CAD圖元的組成部分,會(huì)隨CAD圖形的復(fù)制、轉(zhuǎn)移而攜帶。在CAD二次開(kāi)發(fā)中一般多采用這種模式,該文介紹的就是這種模式[5]。

        3.3 Shapefile的dbf文件數(shù)據(jù)導(dǎo)入CAD

        Shapefile文件的屬性數(shù)據(jù)實(shí)際上存儲(chǔ)在與其根名相同的dbf文件中,其與Shapefile之間的關(guān)聯(lián)主要是靠數(shù)據(jù)類型為“對(duì)象ID”的主關(guān)鍵詞段,這個(gè)字段的名字一般為“FID” 或“OBJECTID”。 這個(gè)dbf文件中每條記錄的主關(guān)鍵詞段值對(duì)應(yīng)一個(gè)Shapefile圖形的對(duì)象ID。在一個(gè)Shapefile文件中,各圖形的對(duì)象ID是從0開(kāi)始的連續(xù)的整數(shù)。

        將Shapefile的dbf文件中的記錄按主關(guān)鍵詞段的升序進(jìn)行排序,在CAD中打開(kāi)導(dǎo)出的CAD文件,逐條讀取dbf文件記錄,按照CAD圖元ObjectID的升序用SetXData方法寫入其擴(kuò)展數(shù)據(jù)中,即可實(shí)現(xiàn)Shapefile到CAD的屬性轉(zhuǎn)換。如下2種方法均可實(shí)現(xiàn)上述目的。

        方法1:將dbf導(dǎo)入一個(gè)數(shù)據(jù)庫(kù)中,然后再通過(guò)ADO連接訪問(wèn)該dbf表,讀取表中的記錄寫入CAD圖元的擴(kuò)展數(shù)據(jù)中。這種方法需要安裝相應(yīng)的數(shù)據(jù)庫(kù)管理軟件。

        方法2:這是1個(gè)比較簡(jiǎn)單的方法。在Excel中直接打開(kāi)dbf文件,按主關(guān)鍵詞段的升序?qū)ζ溥M(jìn)行排序,然后逐行讀取Excel數(shù)據(jù),按照CAD圖元ObjectID屬性值由小到大的順序?qū)懭肫鋽U(kuò)展數(shù)據(jù)中。

        該文采用的是方法2,并為此編寫了宏“ImportXData()”來(lái)輔助實(shí)現(xiàn)。該宏通過(guò)遍歷Eccel活動(dòng)工作表中除標(biāo)題行外的所有行,讀取指定單元格數(shù)據(jù),然后以該順序號(hào)為索引,用CAD模型空間對(duì)象ModelSpace的Item()方法訪問(wèn)相應(yīng)的圖元,為該圖元附加擴(kuò)展數(shù)據(jù)。下面是一個(gè)操作實(shí)例。

        (1)在ArcMap中添加“TEST宗地圖.shp”,將其導(dǎo)出為CAD文件“TEST宗地圖1.dwg”。

        (2)在Excel中打開(kāi)“TEST宗地圖.dbf”, 按“FID”字段的升序?qū)ζ溥M(jìn)行排序。

        (3)運(yùn)行宏“ImportXData()”,將Excel數(shù)據(jù)寫入CAD。

        經(jīng)上述操作, Shapefile的dbf文件數(shù)據(jù)被導(dǎo)入了對(duì)應(yīng)的CAD圖元擴(kuò)展數(shù)據(jù)中。用宏“ElementInfo()”查詢圖元信息,與ArcMap中識(shí)別的圖形屬性進(jìn)行對(duì)比,會(huì)發(fā)現(xiàn)二者是一一對(duì)應(yīng)的。

        4 結(jié)語(yǔ)

        筆者通過(guò)上述文件的分析和代碼演示,向大家展示了怎樣用VBA程序?qū)hapefile圖形及其屬性數(shù)據(jù)轉(zhuǎn)換成CAD圖形及擴(kuò)展數(shù)據(jù)的一般過(guò)程。通過(guò)該文中實(shí)際運(yùn)用,證實(shí)該方法確實(shí)可行可靠,既方便又靈活,可以滿足我們很多個(gè)性化的需求。希望該文能為今后大家解決這類問(wèn)題提供一個(gè)思路。

        猜你喜歡
        圖元屬性數(shù)據(jù)宗地
        一種組態(tài)控件技術(shù)在電力監(jiān)控系統(tǒng)中的運(yùn)用
        學(xué)術(shù)出版物插圖的編排要求(一):圖注
        聯(lián)鎖表自動(dòng)生成軟件的設(shè)計(jì)與實(shí)現(xiàn)
        基于GIS的房產(chǎn)測(cè)繪管理信息系統(tǒng)架構(gòu)研究
        科技資訊(2019年18期)2019-09-17 11:03:28
        無(wú)源多傳感器綜合數(shù)據(jù)關(guān)聯(lián)算法研究
        屬性數(shù)據(jù)分析教學(xué)改革初探
        基于Qt繪圖系統(tǒng)的圖形應(yīng)用優(yōu)化研究與實(shí)現(xiàn)
        軟件(2016年12期)2016-02-13 05:58:14
        基于歷史歸檔的宗地查詢系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
        河南科技(2014年22期)2014-02-27 14:18:03
        網(wǎng)絡(luò)中多敏感屬性數(shù)據(jù)發(fā)布隱私保護(hù)研究
        地籍宗地時(shí)空數(shù)據(jù)庫(kù)中的變化檢測(cè)
        日本不卡一区二区三区在线| 熟妇的荡欲色综合亚洲| 国产亚洲美女精品久久久| 亚洲五月婷婷久久综合| 国产精品黄色av网站| 亚洲夫妻性生活免费视频| 色一情一区二区三区四区| 日本高清不卡二区| 午夜国产小视频在线观看黄| 45岁妇女草逼视频播放| 屁屁影院ccyy备用地址| 国产欧美日产久久| 国产精品一区二区av白丝在线| 91熟女av一区二区在线| 五月天国产成人av免费观看| 毛茸茸性xxxx毛茸茸毛茸茸| 亚洲无码毛片免费视频在线观看| 亚洲无毛成人在线视频| 亚洲欧美日韩精品久久| 狠狠噜天天噜日日噜| 精品国产成人一区二区不卡在线| av免费不卡一区二区| 国产成本人片无码免费2020| 99国产精品视频无码免费| 国产成人精品中文字幕| 嗯啊好爽高潮了在线观看| 内谢少妇xxxxx8老少交 | 国产自产av一区二区三区性色| 国语自产偷拍精品视频偷| 亚洲成人777| 亚洲精品乱码久久麻豆| 精品国产yw在线观看| 精品日韩欧美一区二区在线播放 | 精品黑人一区二区三区| 就爱射视频在线视频在线| 国产又色又爽又刺激在线播放| 无码日韩AⅤ一区二区三区| 久久国产精品懂色av| 丁香五月亚洲综合在线| 藏春阁福利视频| 国产精品亚洲一区二区极品|