張靜雙
(天津機(jī)電職業(yè)技術(shù)學(xué)院 機(jī)械系,天津300131)
電子海圖是一個(gè)籠統(tǒng)的概念,大致可以分成兩個(gè)部分,一部分是電子海圖數(shù)據(jù),另一部是在電子海圖的基礎(chǔ)上開發(fā)的各種應(yīng)用,簡單來說電子海圖就是特制的電子海圖數(shù)據(jù),復(fù)雜來說,電子海圖這個(gè)概念是包含各種與電子海圖相關(guān)聯(lián)的設(shè)備軟件或者硬件技術(shù)的一個(gè)總稱,并且包含了電子海圖數(shù)據(jù)。電子海圖的出現(xiàn)和完善對(duì)提高船舶航行安全、減輕船舶工作量的作用也越來越明顯。
電子海圖是指描寫海域地理信息和航海圖的數(shù)字化產(chǎn)品,是數(shù)字海圖的一種,通過將紙質(zhì)海圖信息經(jīng)過數(shù)字化處理后,形成一個(gè)電子海圖數(shù)據(jù)庫。具有攜帶方便、容易保存的優(yōu)點(diǎn),其主要內(nèi)容是以海域要素為主,詳細(xì)的表示河道或者海底的地形,航道上的障礙物,燈塔導(dǎo)航標(biāo)志等要素。電子海圖一般是由國家官方權(quán)威海道測量機(jī)構(gòu)提供,這些機(jī)構(gòu)同時(shí)還負(fù)責(zé)電子海圖的更新與修正,以保證電子海圖的準(zhǔn)確性及時(shí)性。
本文中所涉及到的電子海圖是與AutoCAD格式相兼容的DXF文件,通過特定的程序,讀寫電子海圖的DXF文件,通過將文件中的有用信息在PC系統(tǒng)的主界面中實(shí)時(shí)顯示,同時(shí)與配合GPS系統(tǒng)配合使用,從而實(shí)時(shí)顯示船體在運(yùn)動(dòng)過程中的實(shí)際位置,為船舶的航線航行提供準(zhǔn)確的參考信息。
DXF是美國Autodesk公司制定并首先用于AutoCAD的圖形交換的文件格式,它是一種基于矢量的ASCII格式,文件的擴(kuò)展名為“.DXF”,用于外部程序和圖形系統(tǒng)或不同的圖形系統(tǒng)之間交換圖形信息。由于它結(jié)構(gòu)簡單、可讀性好,易于被其他程序處理,因此已是事實(shí)上的工業(yè)標(biāo)準(zhǔn)。DXF是一種開放的矢量數(shù)據(jù)格式,可以分為兩類:ASCII格式和二進(jìn)制格式;ASCII具有可讀性好,但占有空間較大;二進(jìn)制格式占有空間小、讀取速度快。目前,絕大多數(shù)CAD系統(tǒng)都能讀入或輸出DXF文件
DXF文件雖然看上去結(jié)構(gòu)復(fù)雜,但由于其數(shù)據(jù)具有嚴(yán)格的存儲(chǔ)格式,各種實(shí)體都以編碼標(biāo)出,因此可以較容易的讀懂它,而且還可以提取所需的所有信息。在用高級(jí)語言編寫接口程序時(shí),由于DXF文件有較嚴(yán)格的規(guī)定,所以必須清楚的了解DXF文件的結(jié)構(gòu)。
一個(gè)完整的DXF文件主要由四個(gè)段和一個(gè)文件結(jié)尾組成。它們是:標(biāo)題(HEADER)段、表(TABLES)段、塊(BLOCKS)段、實(shí)體(ENTITIES)段、結(jié)尾(EOF)段。DXF文件的每一個(gè)段由若干個(gè)組構(gòu)成,每個(gè)組占兩行,第一行為組的代碼,第二行為組值。組代碼相當(dāng)于數(shù)據(jù)類型的代碼,它由CAD圖形系統(tǒng)所規(guī)定,而組值為具體的數(shù)值,二者結(jié)合起來表示一個(gè)數(shù)據(jù)的含義和值。DXF文件各段主要內(nèi)容如下:
(1)標(biāo)題(HEADER)段 該段記錄了AutoCAD系統(tǒng)所有標(biāo)題變量的當(dāng)前值或當(dāng)前狀態(tài)。這些標(biāo)題變量記錄了AutoCAD系統(tǒng)當(dāng)前工作環(huán)境。例如,Auto-CAD的版本號(hào)、插入基點(diǎn)、柵格間距、式樣、當(dāng)前圖層名、當(dāng)前線型、當(dāng)前額色等。
(2)類(CLASSES)段 保存應(yīng)用程序定義的類的信息。
(3)表(TABLES)段 表段包含了四種表,每個(gè)表又包含了可變數(shù)目的表項(xiàng)。按照這些表在文件中出現(xiàn)的順序是線型(LTYPE)表、圖層(LAYER)表、字樣(STYLE)表、視圖(VIEW)表。這些表記錄了當(dāng)前圖形編輯的支撐環(huán)境。
(4)塊(BLOCKS)段 塊段記錄了定義每一個(gè)塊的塊名、當(dāng)前圖層名、塊的種類、塊的插入基點(diǎn)及組成該塊的所有成員。
(5)實(shí)體(ENTITIES)段 該段定義了每個(gè)實(shí)體的種類,所有圖層名、顏色、線型、厚度、實(shí)體描述字及有關(guān)的幾何數(shù)據(jù)。
(6)對(duì)象(OBJECT)段 記錄了包含非傳統(tǒng)的繪圖對(duì)象的一些非實(shí)體的符號(hào)信息。
(7)文件結(jié)束(EOF)。
DXF文件的結(jié)構(gòu)相當(dāng)復(fù)雜,完整讀取DXF文件也是一項(xiàng)異常繁瑣的工程.在實(shí)際應(yīng)用中,為了提取圖形的實(shí)體信息,可以省略DXF文件中的許多項(xiàng),只要獲取其中的層表,塊段和實(shí)體段,就可以完成相應(yīng)幾何圖形的描述.在層表中說明每一層的顏色,線型,在塊段中說明塊所在的層,屬性及其在圖形中的位置,在實(shí)體段中說明直線的起點(diǎn),終點(diǎn)及圓的圓心,半徑等幾何信息和各實(shí)體所在的層.根據(jù)實(shí)體所在的層,在層表中搜索每一層的顏色,線型并將其添加到實(shí)體對(duì)象中.
目前有兩種可以實(shí)現(xiàn)DXF格式文件的讀寫。一種是使用OpenDWG函數(shù)庫,OpenDWG函數(shù)庫是一個(gè)能直接訪問DXF文件的靜態(tài)連接函數(shù)庫,是由一些對(duì)DWG文件有研究的一些公司和個(gè)人組成的團(tuán)體開發(fā)的,具有完善的讀寫DXF文件的接口函數(shù)。二是用戶自主開發(fā)讀寫程序,這種方法是根據(jù)DXF文件基本結(jié)構(gòu)并結(jié)合實(shí)際需要,舍去一些DXF文件中可對(duì)顯示關(guān)系不大的信息,只顯示跟電子海圖文件相關(guān)聯(lián)的部分。具有一定的靈活性。
兩種方法相比第一種使用OpenDWG函數(shù)庫缺點(diǎn)比較明顯,此函數(shù)庫不是免費(fèi)使用的,功能相對(duì)固定,如要實(shí)現(xiàn)實(shí)時(shí)顯示,方法復(fù)雜,而且成本很高。而第二種方法則具有相當(dāng)?shù)撵`活性,而且成本較低。考慮到開發(fā)成本及應(yīng)用的靈活性,本設(shè)計(jì)采用第二種方法開發(fā)DXF文件的讀寫程序。
電子海圖讀寫模塊在電子導(dǎo)航軟件中是相對(duì)獨(dú)立的模塊,本文采用基于Windows程序設(shè)計(jì)的動(dòng)態(tài)鏈接庫開發(fā)此模塊。這樣在建立應(yīng)用程序的可執(zhí)行文件時(shí),不必將庫中的代碼拷貝到可執(zhí)行文件中,而是運(yùn)行時(shí)動(dòng)態(tài)加載動(dòng)態(tài)鏈接庫DLL(Dynamic Link Library),裝載的DLL被映射到進(jìn)程地址空間中。使用動(dòng)態(tài)鏈接庫可以減少內(nèi)存資源的浪費(fèi),同時(shí)可提高程序的可讀性、維護(hù)性及保密性。
具體使用方法是在讀寫并顯示海圖時(shí),在主程序中加載讀寫DXF文件動(dòng)態(tài)鏈接庫接口函數(shù)的入口地址,定義相關(guān)的調(diào)用動(dòng)態(tài)鏈接庫的C++類,通過對(duì)類的對(duì)象的函數(shù)調(diào)用,即可實(shí)現(xiàn)電子海圖在主界面中的實(shí)時(shí)顯示。
根據(jù)DXF文件的格式,電子海圖讀寫模塊程序框圖如圖1所示,可以以此框圖為基礎(chǔ)完成DXF接口程序的開發(fā)。
圖1 DXF文件讀寫模塊流程圖
電子海圖的DXF文件是以大地坐標(biāo)系下的海平面坐標(biāo)為基準(zhǔn)繪制的圖形文件,但是在計(jì)算機(jī)屏幕上顯示電子海圖時(shí),屏幕上顯示使用的是顯示器設(shè)備的坐標(biāo),因此為了能讓設(shè)備屏幕上正常的顯示電子海圖信息,需要在編寫電子海圖顯示程序時(shí)解決實(shí)現(xiàn)海平面基準(zhǔn)的坐標(biāo)系轉(zhuǎn)換到設(shè)備使用的坐標(biāo)系的問題,為了實(shí)現(xiàn)這個(gè)功能,需要在在程序中定義坐標(biāo)轉(zhuǎn)換的宏,實(shí)現(xiàn)邏輯坐標(biāo)到設(shè)備坐標(biāo)的轉(zhuǎn)換。
通過程序的實(shí)際調(diào)試和運(yùn)行證明,這種轉(zhuǎn)換方法可以正確的實(shí)現(xiàn)海圖的顯示,并能實(shí)現(xiàn)電子海圖與航道航線、DGPS定位坐標(biāo)的正確匹配。
本文所介紹的航道電子海圖文件程序開發(fā)方法采用庫文件讀取DXF海圖文件的方法,實(shí)際操作時(shí)應(yīng)用調(diào)用定義在類中的DXF文件讀寫函數(shù)的方法實(shí)現(xiàn)對(duì)電子海圖的讀寫操作。同時(shí)通過宏定義的方式實(shí)現(xiàn)電子海圖在屏幕顯示時(shí)存在屏幕坐標(biāo)與邏輯坐標(biāo)轉(zhuǎn)換問題,實(shí)際運(yùn)行表明,本程序開發(fā)方法是實(shí)用可靠的。
[1]史國有.基于GPS和電子海圖的船舶導(dǎo)航與監(jiān)控系統(tǒng)[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]李宏利,李漢榮.數(shù)字地球模式下的電子海圖應(yīng)用[M].海洋測繪,2004.
[4]吳震亞.基于電子海圖的船舶調(diào)度管理系統(tǒng)[M].航海技術(shù),2003.
[5]趙麗寧,郝江凌.電子海圖導(dǎo)航系統(tǒng)多設(shè)備接口動(dòng)態(tài)鏈接庫的開發(fā)[M].大連海事學(xué)報(bào),2003.
[6]電子海圖及其應(yīng)用系統(tǒng)國際規(guī)范和標(biāo)準(zhǔn)(S-57篇)[M].中華人民共和國海事局.
[7]許兆新,方 明,徐 婧.基于國際標(biāo)準(zhǔn)的電子海圖顯示系統(tǒng)設(shè)計(jì)[J].計(jì)算機(jī)與數(shù)字工程,2005,33(9):23-25.
[8]張英俊,蘇本征.ECDIS中系統(tǒng)電子海圖的設(shè)計(jì)[J].世界海運(yùn).1999,22(1):15-17.
[9]許開宇.符合國際標(biāo)準(zhǔn)的電子海圖顯示和信息系統(tǒng)(ECDIS)[J].船舶工程.1999(5):53-55.
[10]徐 婧,基于國際標(biāo)準(zhǔn)電子海圖顯示系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[碩士論文],哈爾濱工程大學(xué),2005.