基于ComGIS的從Shape文件到Dxf文件格式轉(zhuǎn)換的方法_第1頁
基于ComGIS的從Shape文件到Dxf文件格式轉(zhuǎn)換的方法_第2頁
基于ComGIS的從Shape文件到Dxf文件格式轉(zhuǎn)換的方法_第3頁
免費(fèi)預(yù)覽已結(jié)束,剩余4頁可下載查看

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

基于ComGIS的從Shape文件到Dxf文件格式轉(zhuǎn)換的方法

[摘要]:本文詳細(xì)分析了DXF和Shape文件結(jié)構(gòu),并介紹了一種從Shape文件到DXF文件轉(zhuǎn)換的簡單方法,解決了GIS系統(tǒng)軟件與AutoCAD制圖軟件之間的數(shù)據(jù)共享的問題。并經(jīng)過作者實踐證明,該方法簡單有效。[關(guān)鍵詞]:DXF文件,Shape文件,MapObjectAWayofFormatTranslationfromShapeFiletoDxfFileonBaseofComGISKeywords:DxfFileShapeFileMapObject隨著軟件組件式開發(fā)技術(shù)的逐漸成熟,GIS組件(如ESRI的MapObject和MapInfo的MapX)在專業(yè)型地理信息系統(tǒng)開發(fā)中扮演了重要的角色[3],然而GIS二次開發(fā)組件都具有其天生的局限性,即不同系統(tǒng)之間的數(shù)據(jù)轉(zhuǎn)換功能非常弱,特別是基本不具備從GIS數(shù)據(jù)到AutoCAD制圖系統(tǒng)的數(shù)據(jù)格式轉(zhuǎn)換功能,影響GIS的數(shù)據(jù)共享。因此為了實現(xiàn)數(shù)據(jù)的共享,必須進(jìn)行數(shù)據(jù)格式的轉(zhuǎn)換,目前,通用的數(shù)據(jù)格式轉(zhuǎn)換方式有以下幾種:一、數(shù)據(jù)格式轉(zhuǎn)換方法1、常規(guī)的GIS數(shù)據(jù)格式轉(zhuǎn)化方法就是采用某種編程語言首先讀取源數(shù)據(jù)文件,提取源文件中的圖形信息和屬性信息,然后再寫入目標(biāo)文件中去。這種方法需要同時非常熟悉兩種數(shù)據(jù)文件的格式,因此給數(shù)據(jù)轉(zhuǎn)換帶來了不小的難度。2、利用數(shù)據(jù)格式轉(zhuǎn)換工具這種方法簡單方便,但是通用數(shù)據(jù)格式轉(zhuǎn)換器難以避免的會丟失一些圖形信息,轉(zhuǎn)換出來的圖形一般還需要一些特別的處理,如圖形顏色設(shè)置,符號設(shè)置,區(qū)域填充設(shè)置。3、利用第三方數(shù)據(jù)文件訪問工具進(jìn)行數(shù)據(jù)格式轉(zhuǎn)換這種方法靈活簡單,也具有很強(qiáng)的靈活性,開發(fā)難度小,代價就是需要第三方的數(shù)據(jù)訪問組件。隨著GIS組件式開發(fā)技術(shù)的逐漸成熟,各種GIS組件都具有訪問其本身的GIS數(shù)據(jù)的功能,如MapObject可以訪問ESRIShapeFiles、ArcInfoCoverage和VPF等矢量數(shù)據(jù)格式。利用GIS組件的這種特點(diǎn)可以靈活的自己編寫與其他數(shù)據(jù)格式轉(zhuǎn)換的程序,或者在GIS系統(tǒng)的二次開發(fā)中集成數(shù)據(jù)格式轉(zhuǎn)換的功能,實現(xiàn)GIS數(shù)據(jù)共享。本文研究的內(nèi)容就是利用GIS組件(MapObject)進(jìn)行由Shape到Dxf的格式轉(zhuǎn)換。二、基于ComGIS的從Shape文件到Dxf文件格式轉(zhuǎn)換的方法1、Shape文件結(jié)構(gòu)ESRI的Shape文件是二進(jìn)制文件,能夠同時存儲空間圖形數(shù)據(jù)和屬性數(shù)據(jù)。一個Shape文件包括三個文件:一個主文件(*.shp),一個索引文件(*.shx),和一個dBASE(*.dbf)表。主文件是一個直接存取變量記錄長度文件,其中每個記錄描述一個有它自己的vertices列表的shape。在索引文件中,每個記錄包含對應(yīng)主文件記錄離主文件頭開始的偏移,dBASE表包含了實體的屬性數(shù)據(jù)。圖形數(shù)據(jù)和屬性數(shù)據(jù)通過索引號建立一一對應(yīng)的關(guān)系。Shape文件是按照地物類型來組織的。地物類型可以分為簡單的分為點(diǎn)(Point)、線(Line)、面(Polygon)三種類型,一個Shape文件中只能包括一種類型的地物,即只能包括點(diǎn)、線或者面狀地物中的一種。點(diǎn)狀地物存儲的是一組坐標(biāo)(X,Y),線包括簡單線和多段線,存儲的是一系列的坐標(biāo)串(X1,Y1,X2,Y2…),面狀地物存儲的是一系列封閉的坐標(biāo)串(X1,Y1,X2,Y2,…,X1,Y1)。2、DXF文件結(jié)構(gòu)DXF文件有兩種格式:ASC碼文本格式和二進(jìn)制格式。前者可以用記事本打開,簡單易讀,后者存儲效率高[2]。DXF文件最小組成單位是組(GROUP),一個DXF文件由多個組組成。每個組在DXF文件中占兩行。第一行是組碼(GROUPCODE),它是一個整數(shù);第二行是組值(GROUPVALUE),它的數(shù)據(jù)類型取決于組碼的數(shù)值。例如X坐標(biāo)的組碼為10,Y坐標(biāo)的組碼為20,Z坐標(biāo)的組碼為30。一個DXF文件分為多個節(jié)(SECTION),每個節(jié)均由多個組(GROUP)組成。每個節(jié)均由一個組值為字符串“SECTION”的0組開始,后跟組值為表示段名的字符串的2組,其后為組成該節(jié)的各個組,最后以組值為字符串“ENDSEC”的0組表示該節(jié)結(jié)束。所有節(jié)都結(jié)束后,在DXF文件的最后是組值為字符串EOF(ENDOFFILE)的0組作為文件的結(jié)束標(biāo)志。一個完整的DXF文件由以下七個節(jié)(SECTION)組成:A.標(biāo)題(HEADER)節(jié):包括與圖形相關(guān)聯(lián)的變量的設(shè)置,例如圖形節(jié)最大、最小X坐標(biāo)和最大、最小Y坐標(biāo)($LIMMIN,$LIMMAX),點(diǎn)顯示模式($PDMODE),點(diǎn)尺寸($PDSIZE)等。其中的每一個變量都通過組碼9給出變量名,并由其后的組碼提供變量值。B.類(CLASSES)節(jié):類節(jié)保存由應(yīng)用程序定義的類,而該類的實例則出現(xiàn)在塊節(jié)(BLOCKS)、實體節(jié)(ENTITIES)和對象節(jié)(OBJECTS)中。C.表(TABLE)節(jié):包含命名項的定義,存放一系列表。包括線型(LTYPE)表、層(LAYER)表、文本字樣(STYLE)表、視(VIEW)表、用戶坐標(biāo)系統(tǒng)(USC)表、視窗配制(VPORT)表、尺寸標(biāo)注式樣(DIMSTYLE)表、應(yīng)用標(biāo)識(APPID)表。D.

塊(BLOCK)節(jié):存放塊定義的實體。對圖形中每個塊引用,在塊節(jié)中都必需有一個條目與之對應(yīng)。E.實體(ENTITIES)節(jié):存放圖形實體,其中包括塊插入實體。DXF圖形文件中的所有圖元(包括點(diǎn)、線、面、插入塊,注記文字等實體)都將在ENTITIES節(jié)定義。F.實體(OBJECTS)節(jié):存儲非圖形對象。G.

預(yù)覽圖像(THUMBNAILIMAGE)節(jié):只有當(dāng)預(yù)覽圖像被保存在DXF文件中時該節(jié)才存在。編寫一個構(gòu)造完備的DXF文件的程序是比較困難且煩瑣的,因為必須保持圖形的一致性,以使AutoCAD能夠接受它,同時還必須保持信息的完整性。值得慶幸是一個DXF文件可以只包含以上七個節(jié)中的若干個節(jié),而不是全部節(jié)。以上七個節(jié)中,最重要的是實體(ENTITIES)節(jié),實體節(jié)存儲了DXF文件所有的圖形對象。一個最簡單的DXF文件可以只包含實體(ENTITIES)節(jié),而不需要包含其他任何節(jié)。這樣就大大降低了DXF文件編寫的難度。3、Shape文件到DXF文件轉(zhuǎn)化的實現(xiàn)由于Shape文件是二進(jìn)制文件,且文件格式復(fù)雜,直接使用編程語言讀取Shape文件具有一定的困難,由此作者使用第三方開發(fā)組件MapObject提供的對Shape文件的數(shù)據(jù)訪問接口來讀取Shape文件內(nèi)容,大大降低了Shape文件到DXF文件格式轉(zhuǎn)化的編程工作量。MapObject是目前最優(yōu)秀的GIS二次開發(fā)組件之一,他提供了一系列的GIS制圖功能和訪問ESRIShapeFiles的數(shù)據(jù)訪問接口[1]。利用MapObject對Shape文件的數(shù)據(jù)訪問功能來提取Shape的圖形信息,具有不丟失圖形信息、數(shù)據(jù)訪問簡單等優(yōu)點(diǎn)。下面是Shape文件類型與DXF圖元類型對照表:圖1.Shape文件地物類型與DXF文件圖元類型對照表作者以某市地下管線Shape文件為例,實現(xiàn)了將管線Shape文件轉(zhuǎn)化為AutoCAD系統(tǒng)DXF文件,并將數(shù)據(jù)轉(zhuǎn)化功能集成到某市地下管線管理信息系統(tǒng)中,很好的解決了地下管線管理系統(tǒng)與AutoCAD制圖系統(tǒng)之間的數(shù)據(jù)格式共享問題。轉(zhuǎn)化過程中沒有丟失圖形信息。下面以地下管點(diǎn)Shape文件為例,簡單介紹如何將點(diǎn)圖元寫入DXF文件。點(diǎn)狀地物對應(yīng)DXF文件的點(diǎn)圖元,但是由于Shape文件中點(diǎn)狀地物通常表示地圖上的一個獨(dú)立地物,如電線桿等,他具有某些特殊的符號,因此往往需要把Shape文件的點(diǎn)狀地物作為一個塊(Block)插入到DXF文件中,這也是通用的文件格式轉(zhuǎn)換工具所不能做到的。下面是一個插入圖塊的通用函數(shù):PublicSubInsertBlock(lyrNameAsString,blkNameAsString,XAsDouble,YAsDouble)Print#fnum,0Print#fnum,"INSERT"‘插入圖塊組碼Print#fnum,8Print#fnum,lyrName‘插入圖塊的圖層名Print#fnum,100Print#fnum,"AcDbBlockReference"Print#fnum,2Print#fnum,blkName‘插入的圖塊名Print#fnum,10Print

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論