基于ComGIS的從Shape文件到Dxf文件格式轉換的方法_第1頁
基于ComGIS的從Shape文件到Dxf文件格式轉換的方法_第2頁
基于ComGIS的從Shape文件到Dxf文件格式轉換的方法_第3頁
免費預覽已結束,剩余4頁可下載查看

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

基于ComGIS的從Shape文件到Dxf文件格式轉換的方法

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

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

預覽圖像(THUMBNAILIMAGE)節:只有當預覽圖像被保存在DXF文件中時該節才存在。編寫一個構造完備的DXF文件的程序是比較困難且煩瑣的,因為必須保持圖形的一致性,以使AutoCAD能夠接受它,同時還必須保持信息的完整性。值得慶幸是一個DXF文件可以只包含以上七個節中的若干個節,而不是全部節。以上七個節中,最重要的是實體(ENTITIES)節,實體節存儲了DXF文件所有的圖形對象。一個最簡單的DXF文件可以只包含實體(ENTITIES)節,而不需要包含其他任何節。這樣就大大降低了DXF文件編寫的難度。3、Shape文件到DXF文件轉化的實現由于Shape文件是二進制文件,且文件格式復雜,直接使用編程語言讀取Shape文件具有一定的困難,由此作者使用第三方開發組件MapObject提供的對Shape文件的數據訪問接口來讀取Shape文件內容,大大降低了Shape文件到DXF文件格式轉化的編程工作量。MapObject是目前最優秀的GIS二次開發組件之一,他提供了一系列的GIS制圖功能和訪問ESRIShapeFiles的數據訪問接口[1]。利用MapObject對Shape文件的數據訪問功能來提取Shape的圖形信息,具有不丟失圖形信息、數據訪問簡單等優點。下面是Shape文件類型與DXF圖元類型對照表:圖1.Shape文件地物類型與DXF文件圖元類型對照表作者以某市地下管線Shape文件為例,實現了將管線Shape文件轉化為AutoCAD系統DXF文件,并將數據轉化功能集成到某市地下管線管理信息系統中,很好的解決了地下管線管理系統與AutoCAD制圖系統之間的數據格式共享問題。轉化過程中沒有丟失圖形信息。下面以地下管點Shape文件為例,簡單介紹如何將點圖元寫入DXF文件。點狀地物對應DXF文件的點圖元,但是由于Shape文件中點狀地物通常表示地圖上的一個獨立地物,如電線桿等,他具有某些特殊的符號,因此往往需要把Shape文件的點狀地物作為一個塊(Block)插入到DXF文件中,這也是通用的文件格式轉換工具所不能做到的。下面是一個插入圖塊的通用函數: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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論