王 雷,趙冰雪
池州學院資源環境學院,安徽池州,247000
?
ArcGIS與CorelDraw數據格式轉換實現
王雷,趙冰雪
池州學院資源環境學院,安徽池州,247000
針對現有地圖制圖軟件ArcGIS和CorelDraw數據共享困難的問題,探討了基于兩種軟件的二次開發技術實現數據格式轉換的方法。采用ArcGIS二次開發組件庫ArcGIS Engine讀取GIS數據,借助第三方數據格式Dxf和XML技術完成數據輸出,在此基礎上,通過CorelDraw COM庫完成地圖數據的導入和設置,從而實現ArcGIS文件到CorelDraw文件的轉換。最后,以皖南國際文化旅游示范區為例,完成了ArcGIS專題圖數據到CorelDraw數據格式的轉換,結果表明該方法能夠靈活、有效地完成兩種軟件之間的數據轉換。
ArcGIS;CorelDraw;格式轉換
隨著GIS技術在相關行業應用的不斷深入,GIS軟件的各種功能也為人們所熟知。GIS充分結合空間和屬性數據,不僅可以生產高質量的數字線劃圖,同時可以通過復雜的空間分析功能挖掘地理空間中隱含的信息,在此基礎上生成各類專題地圖。GIS數據規范性好,邏輯性強,數據源廣泛,便于篩選,這些特點使得應用GIS軟件制圖越來越受到數字制圖人員的喜愛,其中以ArcGIS軟件的普及率最高。ArcGIS的桌面產品ArcMap集地圖繪制、編輯、顯示和輸出于一體,組件式GIS開發平臺ArcGIS Engine提供了豐富的類庫和開發資源,使得傳統的地圖制作與編輯方式發生了重大變化。
CorelDraw是一款具有強大圖形、文字編輯與整飾功能的矢量圖形繪制軟件,與其他制圖相比,它的主要優勢在于極強的圖形處理功能以及獨特的表現效果。軟件能夠兼容Dxf、Dwg、Eps、PS、AI和BMP等多種數據格式,排版功能強大,可直接輸出PS和EP格式用于印刷[1];尤其是符號化功能強大,用戶可以根據自己的需要創建各類符號,簡單易學,頗受制圖人員的青睞,在各類專題地圖的設計與編繪中已得到普遍使用[2-4]。
充分結合ArcGIS數據精確的空間信息和CorelDraw軟件完美的地圖整飾能力完成一幅優質的地圖,更好地服務于各類生產活動,需要解決兩種軟件間的數據共享問題。本文采用ArcGIS Engine10.2和CorelDraw 16.0 Type Library類庫,借助第三方數據格式Dxf完成ArcGIS數據到CorelDraw數據的轉換,實現ArcGIS與CorelDraw軟件間的數據共享。
首先借助ArcGIS Engine類庫讀取Mxd文檔,將文檔中的要素類分別轉換成Dxf格式,在轉換的過程中,將要素類的范圍信息、符號顏色和尺寸等信息保存到同時生成的XML文件中。其次通過CorelDraw ActiveX Automation技術建立與CorelDraw對象的連接,實現訪問和控制CorelDraw,在此基礎上將Dxf文件導入CorelDraw。最后讀取保存在XML文件中的信息,計算各圖層導入后的縮放比例和中心點的位移,同時完善圖形的顏色和尺寸信息;最終保存為cdr格式文件。技術思路如圖1所示。

圖1 數據轉換思路
ArcGIS Engine是ArcGIS平臺的二次開發組件庫,具有強大GIS數據處理分析功能。本文使用ArcGIS Engine訪問ArcGIS地圖文檔(Mxd)及其包含的圖層數據。ArcGIS Engine中提供了Geoprocessor對象,用于調用ArcGIS的處理過程,通過Geoprocessor對象執行ExportCAD操作,可以將各圖層保存為Dxf文件,執行過程中該方法同時將執行過程的相關參數保存為XML格式文件。
XML即可擴展標記語言,是一種是用于標記電子文件并使其具有結構性的標記語言,常用語描述各類數據結構。CorelDraw軟件由于對圖幅尺寸有限制,而地理數據的范圍往往比較大,在數據導入過程中軟件會自動根據原圖的范圍和大小選擇特定的比例進行縮放,導致圖層的比例不一致;同時,由于CorelDraw軟件不是地理信息系統軟件,沒有地理坐標的概念,GIS數據導入CorelDraw后地理參考丟失,圖層之間的相對位置發生變化[5]。在一般制圖方法中,需要采用對各圖層繪制統一外邊框的方式保證導入后圖形的相對比例和位置關系[6],該方法需要對原始Mxd文檔的各圖層繪制外邊框,當數據圖層較多時,較為費時。本文使用XML文件保存原始圖層的相關信息,用于計算導入CorelDraw后各圖層的縮放比例、中心點位移和完善符號信息。
ActiveX Automation的基礎是微軟的COM協議,協議的目的在于提供二進制的可復用代碼模塊。該技術能夠使用戶程序以相同的方式將其他軟件中實現的任何自動化對象集成到自己的應用程序中,實現應用程序間的對象共享[7]。由于ActiveX不依賴于任何編程語言,本文選用C#語言開發環境建立與CorelDraw對象的連接,實現訪問CorelDraw軟件的各項處理功能和處理后的數據。
現以皖南國際文化旅游示范區專題圖的制作來說明整個數據轉化的流程。
3.1ArcGIS專題圖制作
專題圖的原始數據共包括6個shapefile文件,分別為安徽省行政界線、市級行政界線、示范區縣級行政界線、市級行政中心、縣級行政中心和水系文件。將這些文件加載到ArcMap中并進行符號化,其中縣級行政中心符號的顏色為藍色,尺寸為14(ArcMap中尺寸單位為points,每個point單位約等于0.353 mm);市級行政中心符號顏色為綠色,尺寸為18;水系填充顏色的RGB值分別為151、219、242,邊框顏色的RGB值為64、101、235,寬度為0.4;示范區填充顏色的RGB值為112、168、0,邊框顏色的RGB值為110、110、110,寬度為0.4;市級行政界線填充顏色為白色,邊框顏色為灰色(110、110、110),寬度為0.4;省界圖層無填充顏色,邊框顏色為紅色,寬度為2。效果如圖2所示。

圖2 皖南國際文化旅游示范區
3.2開發步驟
(1)新建窗體程序,添加ArcGIS引用和CorelDraw 16.0 Type Library類庫文件,針對ArcGIS常用的地圖文檔(mxd)設計mxd轉cdr窗口,如圖3所示,針對其圖形文件(shp)設計shp轉cdr窗口,如圖4所示。

圖3 mxd轉cdr窗口

圖4 shp轉cdr窗口
(2)建立ShpFile和MxdFile類用于描述ArcGIS文件。ShpFile類的主要方法有三種:ConvertToDxf、WriteExtentInfoToXML和WriteSymbolInfoToXML,其中ConvertToDxf方法使用Geoprocessor類執行ExportCAD工具將shp文件轉換為Dxf文件,同時調用WriteExtentInfoToXML方法將圖層的范圍信息寫入XML文件。
主要語句如下:
Geoprocessor gp=new Geoprocessor();
ExportCAD ExportToCAD=new ExportCAD();
ExportToCAD.in_features=FilePath;
ExportToCAD.Output_File=DxfFilePath;
gp.Execute(ExportToCAD,null);
WriteExtentInfoToXML(DxfFilePath+".xml",pFeatureClass);
MxdFile類主要方法有ConvertToDxfs。該方法首先讀取文檔中的圖層數據,然后利用ShpFile類的ConvertToDxf方法將各圖層分別轉成Dxf文件。借助IGeoFeatureLayer接口的Renderer屬性獲取各圖層的渲染屬性,通過ShpFile類的WriteSymbolInfoToXML將符號信息寫入XML文件。
(3)新建CdrFile類用于描述cdr文件。建立CdrFile類的主要方法有ImportDXF、GetExtentInfoFromXML、GetCDRlyrMaxExtent和GetSymbolInfoFromXML。其中導入Dxf文件的語句為:
Layer lyr=doc.ActivePage.CreateLayer(fileName);
StructImportOptions Option=new StructImportOptionsClass();
lyr.Import(DxfFilePath,cdrFilter.cdrDXF,Option);
GetExtentInfoFromXML和GetCDRlyrMaxExtent方法用于獲取Dxf圖層和cdr圖層的范圍。根據獲取導入前的Dxf圖層范圍和導入后的cdr圖層范圍信息,可以計算圖層的縮放比例,從而統一各圖層的比例。其主要邏輯為:計算最大范圍圖層的縮放比例與當前導入圖層的縮放比例X、Y比例系數XScale和YScale,使用StretchEx方法以當前圖形的中心點為基點按比例系數進行拉伸。另外,該信息可用于計算當前導入圖層的中心位置與范圍最大圖層中心位置的偏移量。主要邏輯為:計算當前導入的Dxf文件的中心點與范圍最大Dxf文件的中心點偏移量,乘以文件縮放比例獲得X、Y偏移量XDelta和YDelta,最后使用Move方法移動圖形。
主要語句如下:
//縮放當前圖層
Double XScale=((cdrRightX-cdrLeftX)/(dxfMaxX-dxfMinX))/
((CurrentcdrMaxX-CurrentcdrMinX)/(CurrentDxfMaxX-CurrentDxfMinX));
double YScale=((cdrTopY-cdrBottomY)/(dxfMaxY-dxfMinY))/
((CurrentcdrMaxY-CurrentcdrMinY)/(CurrentDxfMaxY-CurrentDxfMinY));
doc.ActiveLayer.Shapes[1].StretchEx(CenterX,CenterY,XScale,YScale);
//移動當前圖層
double Xdelta=((CurrentDxfMaxX+CurrentDxfMinX)/2-(dxfMaxX+dxfMinX)/2)*((cdrRightX-cdrLeftX)/(dxfMaxX-dxfMinX));
double Ydelta=((CurrentDxfMaxY+CurrentDxfMinY)/2-(dxfMaxY+dxfMinY)/2)*((cdrTopY-cdrBottomY)/(dxfMaxY-dxfMinY));
doc.ActiveLayer.Shapes[1].Move(Xdelta,Ydelta);
GetSymbolInfoFromXML方法讀取Mxd文檔的符號信息,用于CorelDraw圖形對象的符號設置。CorelDraw軟件中沒有明確點的概念,點圖層導入后以極小的閉合曲線表示。針對點圖層,采用ActiveLayer對象的CreateEllipse2方法創建以當前點的X、Y坐標為圓心、半徑為原符號尺寸的一半的圓形替代原有的閉合曲線。為了充分利用CorelDraw的符號功能,將圓形轉換為符號,并設置符號顏色,其他圖層點要素可共享該符號。線圖層使用前面獲取的符號信息設置邊框顏色和邊框厚度。面圖層使用前面獲取的符號信息設置填充色、邊框顏色和邊框厚度。

圖5 皖南國際文化旅游示范區
相關語句代碼如下:
sh.Fill.UniformColor.RGBAssign(RGBFillColorR,RGBFillColorG,RGBFillColorB);
sh.Outline.Color.RGBAssign(RGBLineColorR,RGBLineColorG,RGBLineColorB);
sh.Outline.Width=LineWidth
(4)保存cdr文件,效果如圖5所示。
地圖數據共享是制圖的研究熱點,ArcGIS軟件作為當前主流的GIS軟件,具有強大的制圖和分析功能,軟件很好地實現了地理信息的負載,然而其地圖編輯和美化功能不足[8]。筆者基于ArcGIS Engine 10.2和CorelDraw 16.0 Type Library類庫,借助第三方數據格式Dxf,采用C#語言完成ArcGIS數據到CorelDraw數據格式的轉換。實現CorelDraw中圖層相對比例和中心位置的調整以及兩種文件格式間的符號信息傳遞,為兩者間的數據共享,提高制圖效率和質量提供了基礎。
該方法初步完成了兩種文件格式的轉換,但也存在一些問題有待于進一步研究,如地圖符號中一項重要內容是符號的樣式,由于ArcGIS中的符號庫與CorelDraw的符號庫不同,符號樣式無法相互使用,需要進一步研究兩者的符號特點,以實現符號樣式的共享。
[1]麥照秋,韓雪華.GIS數據用于CorelDRAW地圖制圖方法的研究[J].測繪通報,2008(2):62-64
[2]馬洪斌.基于ArcGIS-CorelDraw的地理國情普查專題圖編制探討[J].測繪與空間地理信息,2013,36(9):187-188
[3]張雷,黃亞萍,楊覓.CorelDraw平臺下專題地圖實時展現的研究[J].測繪通報,2014(12):118-121
[4]房雪玲.基于CorelDRAW的地圖注記自動化配置方法研究[J].測繪與空間地理信息,2014,37(11):210-212
[5]曾克明.CorelDraw軟件的二次開發在地圖制圖中的應用與實例[J].測繪通報,2010(8):60-61
[6]孟祥飛,王衛.ArcGIS數據與CorelDraw數據的轉換方法研究[J].測繪科學,2009,34(3):181-182
[7]李論,張志鵬,陳慎.基于CorelDraw X6的專題地圖統計圖表自動化實現[J].測繪工程,2014,23(1):65-68
[8]王延霞,李鵬.ArcGIS與CorelDraw數據轉換與損失彌補方法的探討[J].礦山測量,2010(6):15-17
(責任編輯:汪材印)
10.3969/j.issn.1673-2006.2016.10.027
2016-05-28
池州學院自然科學一般項目“城市自行車租賃站點布局優化研究——以池州市為例”(2015ZR008);池州學院自然科學一般項目“基于GIS的池州市土地利用適宜性評價研究”(2014ZR007)。
王雷(1988-),安徽池州人,碩士,助教,主要研究方向:GIS開發與應用。
P283
A
1673-2006(2016)10-0107-04