基於ComGIS的從Shape檔案到Dxf檔案格式轉換的方法

才智咖 人氣:1.88W
畢業論文

 

[摘  要]:本文詳細了DXF和Shape檔案結構,並介紹了1種從Shape檔案到DXF檔案轉換的簡單,解決了GIS系統軟體與AutoCAD製圖軟體之間的資料共享的。並經過作者實踐證明,該方法簡單有效。

基於ComGIS的從Shape檔案到Dxf檔案格式轉換的方法

[關鍵詞]:DXF檔案,Shape檔案,MapObject

A Way of Format Translation<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

from Shape File to Dxf File on Base of ComGIS

Abstract:This article analyzes the form of DXF file and Shape file in detail, and introduces a simple method of translating Shape file into DXF file to solve the problem of the data sharing between AutoCAD system and GIS system. Through the author’s practice, it has been confirmed that the means is efficient.

Key words:Dxf File   Shape File   MapObject

 

隨著軟體元件式開發技術的逐漸成熟,GIS元件(如ESRI 的MapObject和MapInfo的MapX)在專業型地理資訊系統開發中扮演了重要的角色[3],然而GIS2次開發元件都具有其天生的侷限性,即不同系統之間的資料轉換功能非常弱,特別是基本不具備從GIS資料到AutoCAD製圖系統的資料格式轉換功能,GIS的資料共享。因此為了實現資料的共享,必須進行資料格式的轉換,,通用的資料格式轉換方式有以下幾種:

1、資料格式轉換方法

1、常規的GIS資料格式轉化方法

就是採用某種程式語言首先讀取源資料檔案,提取原始檔中的圖形資訊和屬性資訊,然後再寫入目標檔案中去。這種方法需要同時非常熟悉兩種資料檔案的格式,因此給資料轉換帶來了不小的難度。

2、利用資料格式轉換工具

這種方法簡單方便,但是通用資料格式轉換器難以避免的會丟失1些圖形資訊,轉換出來的圖形1般還需要1些特別的處理,如圖形顏色設定,符號設定,區域填充設定。

3、利用第3方資料檔案訪問工具進行資料格式轉換

這種方法靈活簡單,也具有很強的靈活性,開發難度小,代價就是需要第3方的資料訪問元件。隨著GIS元件式開發技術的逐漸成熟,各種GIS元件都具有訪問其本身的GIS資料的功能,如MapObject可以訪問ESRI Shape Files、ArcInfo Coverage 和VPF等向量資料格式。利用GIS元件的這種特點可以靈活的自己編寫與其他資料格式轉換的程式,或者在GIS系統的2次開發中整合資料格式轉換的功能,實現 GIS資料共享。本文的就是利用GIS元件(MapObject)進行由Shape到Dxf的格式轉換。

2、基於ComGIS的從Shape檔案到Dxf檔案格式轉換的方法

1、 Shape檔案結構

ESRI的Shape檔案是2進位制檔案,能夠同時儲存空間圖形資料和屬性資料。1個Shape檔案包括3個檔案:1個主檔案(*),1個索引檔案(*),和1個dBASE(*)表。主檔案是1個直接存取變數記錄長度檔案,其中每個記錄描述1個有它自己的vertices列表的shape。在索引檔案中,每個記錄包含對應主檔案記錄離主檔案頭開始的偏移,dBASE表包含了實體的屬性資料。圖形資料和屬性資料通過索引號建立11對應的關係。

Shape檔案是按照地物型別來組織的。地物型別可以分為簡單的分為點(Point)、線(Line)、面(Polygon)3種類型,1個Shape檔案中只能包括1種類型的地物,即只能包括點、線或者面狀地物中的1種。點狀地物儲存的是1組座標(X,Y),線包括簡單線和多段線,儲存的是1系列的座標串(X1,Y1,X2,Y2…),面狀地物儲存的是1系列封閉的座標串(X1,Y1,X2,Y2, …, X1,Y1)。

2、DXF檔案結構   

DXF檔案有兩種格式:ASC碼文字格式和2進位制格式。前者可以用記事本開啟,簡單易讀,後者儲存效率高[2]。DXF檔案最小組成單位是組(GROUP),1個DXF檔案由多個組組成。每個組在DXF檔案中佔兩行。第1行是組碼(GROUP CODE),它是1個整數;第2行是組值(GROUP VALUE),它的'資料型別取決於組碼的數值。例如X座標的組碼為10,Y座標的組碼為20,Z座標的組碼為30。1個DXF檔案分為多個節(SECTION),每個節均由多個組(GROUP)組成。每個節均由1個組值為字串“SECTION”的0組開始,後跟組值為表示段名的字串的2組,其後為組成該節的各個組,最後以組值為字串“ENDSEC”的0組表示該節結束。所有節都結束後,在DXF檔案的最後是組值為字串EOF(END OF FILE)的0組作為檔案的結束標誌。1個完整的DXF檔案由以下7個節(SECTION)組成:

A.        標題(HEADER)節:包括與圖形相關聯的變數的設定,例如圖形節最大、最小X座標和最大、最小Y座標($LIMMIN,$LIMMAX),點顯示模式($PDMODE),點尺寸($PDSIZE)等。其中的每1個變數都通過組碼 9 給出變數名,並由其後的組碼提供變數值。

B.        類(CLASSES)節:類節儲存由程式定義的類,而該類的例項則出現在塊節(BLOCKS)、實體節(ENTITIES)和物件節(OBJECTS)中。

C.        表(TABLE)節:包含命名項的定義,存放1系列表。包括線型(LTYPE)表、層(LAYER)表、文字字樣(STYLE)表、視(VIEW)表、使用者座標系統(USC)表、視窗配製(VPORT)表、尺寸標註式樣(DIMSTYLE)表、應用標識(APPID)表。

D.       塊(BLOCK)節:存放塊定義的實體。對圖形中每個塊引用,在塊節中都必需有1個條目與之對應。

E.        實體(ENTITIES)節:存放圖形實體,其中包括塊插入實體。DXF圖形檔案中的所有圖元(包括點、線、面、插入塊,註記文字等實體)都將在ENTITIES節定義。

F.        實體(OBJECTS)節:儲存非圖形物件。

G.       預覽影象(THUMBNAILIMAGE)節:只有當預覽影象被儲存在DXF檔案中時該節才存在。

編寫1個構造完備的DXF檔案的程式是比較困難且煩瑣的,因為必須保持圖形的1致性,以使AutoCAD能夠接受它,同時還必須保持資訊的完整性。值得慶幸是1個DXF檔案可以只包含以上7個節中的若干個節,而不是全部節。以上7個節中,最重要的是實體(ENTITIES)節,實體節儲存了DXF檔案所有的圖形物件。1個最簡單的DXF檔案可以只包含實體(ENTITIES)節,而不需要包含其他任何節。這樣就大大降低了DXF檔案編寫的難度。

3、 Shape檔案到DXF檔案轉化的實現

由於Shape檔案是2進位制檔案,且檔案格式複雜,直接使用程式語言讀取Shape檔案具有1定的困難,由此作者使用第3方開發元件MapObject提供的對Shape檔案的資料訪問介面來讀取Shape檔案內容,大大降低了Shape檔案到DXF檔案格式轉化的程式設計工作量。

MapObject是目前最優秀的GIS2次開發元件之1,他提供了1系列的GIS製圖功能和訪問ESRI Shape Files的資料訪問介面[1]。利用MapObject對Shape檔案的資料訪問功能來提取Shape的圖形資訊,具有不丟失圖形資訊、資料訪問簡單等優點。下面是Shape檔案型別與DXF圖元型別對照表:

地物型別

Shape檔案地物型別

[1]