張靜雙
(天津機電職業技術學院 機械系,天津300131)
電子海圖是一個籠統的概念,大致可以分成兩個部分,一部分是電子海圖數據,另一部是在電子海圖的基礎上開發的各種應用,簡單來說電子海圖就是特制的電子海圖數據,復雜來說,電子海圖這個概念是包含各種與電子海圖相關聯的設備軟件或者硬件技術的一個總稱,并且包含了電子海圖數據。電子海圖的出現和完善對提高船舶航行安全、減輕船舶工作量的作用也越來越明顯。
電子海圖是指描寫海域地理信息和航海圖的數字化產品,是數字海圖的一種,通過將紙質海圖信息經過數字化處理后,形成一個電子海圖數據庫。具有攜帶方便、容易保存的優點,其主要內容是以海域要素為主,詳細的表示河道或者海底的地形,航道上的障礙物,燈塔導航標志等要素。電子海圖一般是由國家官方權威海道測量機構提供,這些機構同時還負責電子海圖的更新與修正,以保證電子海圖的準確性及時性。
本文中所涉及到的電子海圖是與AutoCAD格式相兼容的DXF文件,通過特定的程序,讀寫電子海圖的DXF文件,通過將文件中的有用信息在PC系統的主界面中實時顯示,同時與配合GPS系統配合使用,從而實時顯示船體在運動過程中的實際位置,為船舶的航線航行提供準確的參考信息。
DXF是美國Autodesk公司制定并首先用于AutoCAD的圖形交換的文件格式,它是一種基于矢量的ASCII格式,文件的擴展名為“.DXF”,用于外部程序和圖形系統或不同的圖形系統之間交換圖形信息。由于它結構簡單、可讀性好,易于被其他程序處理,因此已是事實上的工業標準。DXF是一種開放的矢量數據格式,可以分為兩類:ASCII格式和二進制格式;ASCII具有可讀性好,但占有空間較大;二進制格式占有空間小、讀取速度快。目前,絕大多數CAD系統都能讀入或輸出DXF文件
DXF文件雖然看上去結構復雜,但由于其數據具有嚴格的存儲格式,各種實體都以編碼標出,因此可以較容易的讀懂它,而且還可以提取所需的所有信息。在用高級語言編寫接口程序時,由于DXF文件有較嚴格的規定,所以必須清楚的了解DXF文件的結構。
一個完整的DXF文件主要由四個段和一個文件結尾組成。它們是:標題(HEADER)段、表(TABLES)段、塊(BLOCKS)段、實體(ENTITIES)段、結尾(EOF)段。DXF文件的每一個段由若干個組構成,每個組占兩行,第一行為組的代碼,第二行為組值。組代碼相當于數據類型的代碼,它由CAD圖形系統所規定,而組值為具體的數值,二者結合起來表示一個數據的含義和值。DXF文件各段主要內容如下:
(1)標題(HEADER)段 該段記錄了AutoCAD系統所有標題變量的當前值或當前狀態。這些標題變量記錄了AutoCAD系統當前工作環境。例如,Auto-CAD的版本號、插入基點、柵格間距、式樣、當前圖層名、當前線型、當前額色等。
(2)類(CLASSES)段 保存應用程序定義的類的信息。
(3)表(TABLES)段 表段包含了四種表,每個表又包含了可變數目的表項。按照這些表在文件中出現的順序是線型(LTYPE)表、圖層(LAYER)表、字樣(STYLE)表、視圖(VIEW)表。這些表記錄了當前圖形編輯的支撐環境。
(4)塊(BLOCKS)段 塊段記錄了定義每一個塊的塊名、當前圖層名、塊的種類、塊的插入基點及組成該塊的所有成員。
(5)實體(ENTITIES)段 該段定義了每個實體的種類,所有圖層名、顏色、線型、厚度、實體描述字及有關的幾何數據。
(6)對象(OBJECT)段 記錄了包含非傳統的繪圖對象的一些非實體的符號信息。
(7)文件結束(EOF)。
DXF文件的結構相當復雜,完整讀取DXF文件也是一項異常繁瑣的工程.在實際應用中,為了提取圖形的實體信息,可以省略DXF文件中的許多項,只要獲取其中的層表,塊段和實體段,就可以完成相應幾何圖形的描述.在層表中說明每一層的顏色,線型,在塊段中說明塊所在的層,屬性及其在圖形中的位置,在實體段中說明直線的起點,終點及圓的圓心,半徑等幾何信息和各實體所在的層.根據實體所在的層,在層表中搜索每一層的顏色,線型并將其添加到實體對象中.
目前有兩種可以實現DXF格式文件的讀寫。一種是使用OpenDWG函數庫,OpenDWG函數庫是一個能直接訪問DXF文件的靜態連接函數庫,是由一些對DWG文件有研究的一些公司和個人組成的團體開發的,具有完善的讀寫DXF文件的接口函數。二是用戶自主開發讀寫程序,這種方法是根據DXF文件基本結構并結合實際需要,舍去一些DXF文件中可對顯示關系不大的信息,只顯示跟電子海圖文件相關聯的部分。具有一定的靈活性。
兩種方法相比第一種使用OpenDWG函數庫缺點比較明顯,此函數庫不是免費使用的,功能相對固定,如要實現實時顯示,方法復雜,而且成本很高。而第二種方法則具有相當的靈活性,而且成本較低。考慮到開發成本及應用的靈活性,本設計采用第二種方法開發DXF文件的讀寫程序。
電子海圖讀寫模塊在電子導航軟件中是相對獨立的模塊,本文采用基于Windows程序設計的動態鏈接庫開發此模塊。這樣在建立應用程序的可執行文件時,不必將庫中的代碼拷貝到可執行文件中,而是運行時動態加載動態鏈接庫DLL(Dynamic Link Library),裝載的DLL被映射到進程地址空間中。使用動態鏈接庫可以減少內存資源的浪費,同時可提高程序的可讀性、維護性及保密性。
具體使用方法是在讀寫并顯示海圖時,在主程序中加載讀寫DXF文件動態鏈接庫接口函數的入口地址,定義相關的調用動態鏈接庫的C++類,通過對類的對象的函數調用,即可實現電子海圖在主界面中的實時顯示。
根據DXF文件的格式,電子海圖讀寫模塊程序框圖如圖1所示,可以以此框圖為基礎完成DXF接口程序的開發。

圖1 DXF文件讀寫模塊流程圖
電子海圖的DXF文件是以大地坐標系下的海平面坐標為基準繪制的圖形文件,但是在計算機屏幕上顯示電子海圖時,屏幕上顯示使用的是顯示器設備的坐標,因此為了能讓設備屏幕上正常的顯示電子海圖信息,需要在編寫電子海圖顯示程序時解決實現海平面基準的坐標系轉換到設備使用的坐標系的問題,為了實現這個功能,需要在在程序中定義坐標轉換的宏,實現邏輯坐標到設備坐標的轉換。
通過程序的實際調試和運行證明,這種轉換方法可以正確的實現海圖的顯示,并能實現電子海圖與航道航線、DGPS定位坐標的正確匹配。
本文所介紹的航道電子海圖文件程序開發方法采用庫文件讀取DXF海圖文件的方法,實際操作時應用調用定義在類中的DXF文件讀寫函數的方法實現對電子海圖的讀寫操作。同時通過宏定義的方式實現電子海圖在屏幕顯示時存在屏幕坐標與邏輯坐標轉換問題,實際運行表明,本程序開發方法是實用可靠的。
[1]史國有.基于GPS和電子海圖的船舶導航與監控系統[J].中國航海,2003.
[2]Kang H.I,Watermarking techniques using the drawing exchange format(DXF),file,Proceedings of the ACM International Multimedia Conference and Exhibition,2001.
[3]李宏利,李漢榮.數字地球模式下的電子海圖應用[M].海洋測繪,2004.
[4]吳震亞.基于電子海圖的船舶調度管理系統[M].航海技術,2003.
[5]趙麗寧,郝江凌.電子海圖導航系統多設備接口動態鏈接庫的開發[M].大連海事學報,2003.
[6]電子海圖及其應用系統國際規范和標準(S-57篇)[M].中華人民共和國海事局.
[7]許兆新,方 明,徐 婧.基于國際標準的電子海圖顯示系統設計[J].計算機與數字工程,2005,33(9):23-25.
[8]張英俊,蘇本征.ECDIS中系統電子海圖的設計[J].世界海運.1999,22(1):15-17.
[9]許開宇.符合國際標準的電子海圖顯示和信息系統(ECDIS)[J].船舶工程.1999(5):53-55.
[10]徐 婧,基于國際標準電子海圖顯示系統設計與實現[碩士論文],哈爾濱工程大學,2005.