- 相關(guān)推薦
基于ComGIS的從Shape文件到Dxf文件格式轉(zhuǎn)換的方法
畢業(yè)論文
[摘 要]:本文詳細(xì)了DXF和Shape文件結(jié)構(gòu),并介紹了1種從Shape文件到DXF文件轉(zhuǎn)換的簡(jiǎn)單,解決了GIS系統(tǒng)軟件與AutoCAD制圖軟件之間的數(shù)據(jù)共享的。并經(jīng)過作者實(shí)踐證明,該方法簡(jiǎn)單有效。
[關(guān)鍵詞]:DXF文件,Shape文件,MapObject
A Way of Format Translation
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
隨著軟件組件式開發(fā)技術(shù)的逐漸成熟,GIS組件(如ESRI 的MapObject和MapInfo的MapX)在專業(yè)型地理信息系統(tǒng)開發(fā)中扮演了重要的角色[3],然而GIS2次開發(fā)組件都具有其天生的局限性,即不同系統(tǒng)之間的數(shù)據(jù)轉(zhuǎn)換功能非常弱,特別是基本不具備從GIS數(shù)據(jù)到AutoCAD制圖系統(tǒng)的數(shù)據(jù)格式轉(zhuǎn)換功能,GIS的數(shù)據(jù)共享。因此為了實(shí)現(xiàn)數(shù)據(jù)的共享,必須進(jìn)行數(shù)據(jù)格式的轉(zhuǎn)換,,通用的數(shù)據(jù)格式轉(zhuǎn)換方式有以下幾種:
1、數(shù)據(jù)格式轉(zhuǎn)換方法
1、常規(guī)的GIS數(shù)據(jù)格式轉(zhuǎn)化方法
就是采用某種編程語(yǔ)言首先讀取源數(shù)據(jù)文件,提取源文件中的圖形信息和屬性信息,然后再寫入目標(biāo)文件中去。這種方法需要同時(shí)非常熟悉兩種數(shù)據(jù)文件的格式,因此給數(shù)據(jù)轉(zhuǎn)換帶來了不小的難度。
2、利用數(shù)據(jù)格式轉(zhuǎn)換工具
這種方法簡(jiǎn)單方便,但是通用數(shù)據(jù)格式轉(zhuǎn)換器難以避免的會(huì)丟失1些圖形信息,轉(zhuǎn)換出來的圖形1般還需要1些特別的處理,如圖形顏色設(shè)置,符號(hào)設(shè)置,區(qū)域填充設(shè)置。
3、利用第3方數(shù)據(jù)文件訪問工具進(jìn)行數(shù)據(jù)格式轉(zhuǎn)換
這種方法靈活簡(jiǎn)單,也具有很強(qiáng)的靈活性,開發(fā)難度小,代價(jià)就是需要第3方的數(shù)據(jù)訪問組件。隨著GIS組件式開發(fā)技術(shù)的逐漸成熟,各種GIS組件都具有訪問其本身的GIS數(shù)據(jù)的功能,如MapObject可以訪問ESRI Shape Files、ArcInfo Coverage 和VPF等矢量數(shù)據(jù)格式。利用GIS組件的這種特點(diǎn)可以靈活的自己編寫與其他數(shù)據(jù)格式轉(zhuǎn)換的程序,或者在GIS系統(tǒng)的2次開發(fā)中集成數(shù)據(jù)格式轉(zhuǎn)換的功能,實(shí)現(xiàn) GIS數(shù)據(jù)共享。本文的就是利用GIS組件(MapObject)進(jìn)行由Shape到Dxf的格式轉(zhuǎn)換。
2、基于ComGIS的從Shape文件到Dxf文件格式轉(zhuǎn)換的方法
1、 Shape文件結(jié)構(gòu)
ESRI的Shape文件是2進(jìn)制文件,能夠同時(shí)存儲(chǔ)空間圖形數(shù)據(jù)和屬性數(shù)據(jù)。1個(gè)Shape文件包括3個(gè)文件:1個(gè)主文件(*.shp),1個(gè)索引文件(*.shx),和1個(gè)dBASE(*.dbf)表。主文件是1個(gè)直接存取變量記錄長(zhǎng)度文件,其中每個(gè)記錄描述1個(gè)有它自己的vertices列表的shape。在索引文件中,每個(gè)記錄包含對(duì)應(yīng)主文件記錄離主文件頭開始的偏移,dBASE表包含了實(shí)體的屬性數(shù)據(jù)。圖形數(shù)據(jù)和屬性數(shù)據(jù)通過索引號(hào)建立11對(duì)應(yīng)的關(guān)系。
Shape文件是按照地物類型來組織的。地物類型可以分為簡(jiǎn)單的分為點(diǎn)(Point)、線(Line)、面(Polygon)3種類型,1個(gè)Shape文件中只能包括1種類型的地物,即只能包括點(diǎn)、線或者面狀地物中的1種。點(diǎn)狀地物存儲(chǔ)的是1組坐標(biāo)(X,Y),線包括簡(jiǎn)單線和多段線,存儲(chǔ)的是1系列的坐標(biāo)串(X1,Y1,X2,Y2…),面狀地物存儲(chǔ)的是1系列封閉的坐標(biāo)串(X1,Y1,X2,Y2, …, X1,Y1)。
2、DXF文件結(jié)構(gòu)
DXF文件有兩種格式:ASC碼文本格式和2進(jìn)制格式。前者可以用記事本打開,簡(jiǎn)單易讀,后者存儲(chǔ)效率高[2]。DXF文件最小組成單位是組(GROUP),1個(gè)DXF文件由多個(gè)組組成。每個(gè)組在DXF文件中占兩行。第1行是組碼(GROUP CODE),它是1個(gè)整數(shù);第2行是組值(GROUP VALUE),它的數(shù)據(jù)類型取決于組碼的數(shù)值。例如X坐標(biāo)的組碼為10,Y坐標(biāo)的組碼為20,Z坐標(biāo)的組碼為30。1個(gè)DXF文件分為多個(gè)節(jié)(SECTION),每個(gè)節(jié)均由多個(gè)組(GROUP)組成。每個(gè)節(jié)均由1個(gè)組值為字符串“SECTION”的0組開始,后跟組值為表示段名的字符串的2組,其后為組成該節(jié)的各個(gè)組,最后以組值為字符串“ENDSEC”的0組表示該節(jié)結(jié)束。所有節(jié)都結(jié)束后,在DXF文件的最后是組值為字符串EOF(END OF FILE)的0組作為文件的結(jié)束標(biāo)志。1個(gè)完整的DXF文件由以下7個(gè)節(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)等。其中的每1個(gè)變量都通過組碼 9 給出變量名,并由其后的組碼提供變量值。
B. 類(CLASSES)節(jié):類節(jié)保存由程序定義的類,而該類的實(shí)例則出現(xiàn)在塊節(jié)(BLOCKS)、實(shí)體節(jié)(ENTITIES)和對(duì)象節(jié)(OBJECTS)中。
C. 表(TABLE)節(jié):包含命名項(xiàng)的定義,存放1系列表。包括線型(LTYPE)表、層(LAYER)表、文本字樣(STYLE)表、視(VIEW)表、用戶坐標(biāo)系統(tǒng)(USC)表、視窗配制(VPORT)表、尺寸標(biāo)注式樣(DIMSTYLE)表、應(yīng)用標(biāo)識(shí)(APPID)表。
D. 塊(BLOCK)節(jié):存放塊定義的實(shí)體。對(duì)圖形中每個(gè)塊引用,在塊節(jié)中都必需有1個(gè)條目與之對(duì)應(yīng)。
E. 實(shí)體(ENTITIES)節(jié):存放圖形實(shí)體,其中包括塊插入實(shí)體。DXF圖形文件中的所有圖元(包括點(diǎn)、線、面、插入塊,注記文字等實(shí)體)都將在ENTITIES節(jié)定義。
F. 實(shí)體(OBJECTS)節(jié):存儲(chǔ)非圖形對(duì)象。
G. 預(yù)覽圖像(THUMBNAILIMAGE)節(jié):只有當(dāng)預(yù)覽圖像被保存在DXF文件中時(shí)該節(jié)才存在。
編寫1個(gè)構(gòu)造完備的DXF文件的程序是比較困難且煩瑣的,因?yàn)楸仨毐3謭D形的1致性,以使AutoCAD能夠接受它,同時(shí)還必須保持信息的完整性。值得慶幸是1個(gè)DXF文件可以只包含以上7個(gè)節(jié)中的若干個(gè)節(jié),而不是全部節(jié)。以上7個(gè)節(jié)中,最重要的是實(shí)體(ENTITIES)節(jié),實(shí)體節(jié)存儲(chǔ)了DXF文件所有的圖形對(duì)象。1個(gè)最簡(jiǎn)單的DXF文件可以只包含實(shí)體(ENTITIES)節(jié),而不需要包含其他任何節(jié)。這樣就大大降低了DXF文件編寫的難度。
3、 Shape文件到DXF文件轉(zhuǎn)化的實(shí)現(xiàn)
由于Shape文件是2進(jìn)制文件,且文件格式復(fù)雜,直接使用編程語(yǔ)言讀取Shape文件具有1定的困難,由此作者使用第3方開發(fā)組件MapObject提供的對(duì)Shape文件的數(shù)據(jù)訪問接口來讀取Shape文件內(nèi)容,大大降低了Shape文件到DXF文件格式轉(zhuǎn)化的編程工作量。
MapObject是目前最優(yōu)秀的GIS2次開發(fā)組件之1,他提供了1系列的GIS制圖功能和訪問ESRI Shape Files的數(shù)據(jù)訪問接口[1]。利用MapObject對(duì)Shape文件的數(shù)據(jù)訪問功能來提取Shape的圖形信息,具有不丟失圖形信息、數(shù)據(jù)訪問簡(jiǎn)單等優(yōu)點(diǎn)。下面是Shape文件類型與DXF圖元類型對(duì)照表:
地物類型
Shape文件地物類型
[1]
【基于ComGIS的從Shape文件到Dxf文件格式轉(zhuǎn)換的方法】相關(guān)文章:
AVI文件格式分析及其播放控件的設(shè)計(jì)07-08
圖形文件的類型轉(zhuǎn)換VC++06-15
基于Matlab軟件讀取GPS標(biāo)準(zhǔn)格式Rinex文件的新方法05-04
基于空間轉(zhuǎn)換的企業(yè)創(chuàng)新過程描述與管理06-29
基于網(wǎng)格的聚類方法研究07-13
三維坐標(biāo)轉(zhuǎn)換的公共點(diǎn)選擇方法08-21