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