趙振華 曲為貴 劉仕剛 劉鈞沅 孔祥棟
(天津華北地質(zhì)勘查總院 天津 300170)
利用GPS手持機(jī)進(jìn)行地質(zhì)、物探、化探進(jìn)行測點(diǎn)測網(wǎng)的實(shí)際定位已成為地質(zhì)工作的基本做法,在進(jìn)行大面積測量工作時(shí),大量的測點(diǎn)坐標(biāo)信息要輸入到GPS手持機(jī)中,而MapSource軟件本身又沒有提供批量輸入測點(diǎn)坐標(biāo)的方法,如果采用人工輸入既不能提高工作效率也不能保證數(shù)據(jù)的準(zhǔn)確無誤,前人已總結(jié)出一套利用MapSource 的交換格式文件GPX實(shí)現(xiàn)批量輸入的方法[1-2],但還有一定的局限性,本文從另外一個(gè)途徑實(shí)現(xiàn)了更加靈活的方式來進(jìn)行GPS測點(diǎn)數(shù)據(jù)的批量輸入,也為從軟件底層對(duì)手持GPS的開發(fā)提供了一種方式。本文的整體思路是,首先獲取MapSource 與GPS 手持機(jī)設(shè)備之間的通信方式及數(shù)據(jù)包格式,然后加載winUSB 驅(qū)動(dòng),最后通過編寫程序利用已有的數(shù)據(jù)格式對(duì)GPS手持機(jī)實(shí)現(xiàn)測點(diǎn)數(shù)據(jù)的批量輸入。
GPSmap60CSx 該型設(shè)備為使用較為廣泛的GPS設(shè)備,本文以該設(shè)備為研究對(duì)象,MapSource 為防止個(gè)人對(duì)GPS 內(nèi)部存儲(chǔ)的數(shù)據(jù)屬性進(jìn)行修改,其并沒有提供軟件接口實(shí)現(xiàn)對(duì)測點(diǎn)數(shù)據(jù)的批量輸入方式,Bus Hound 軟件是由美國Perisoft 公司研制的一種專用于PC 機(jī)各種總線數(shù)據(jù)包監(jiān)視和控制的開發(fā)工具軟件[3],利用該軟件監(jiān)控MapSource 驅(qū)動(dòng)程序與GPS?map60CSx設(shè)備通信的數(shù)據(jù)包。
具體做法為在MapSource 航點(diǎn)屬性界面先輸入001(X:0,Y:0,H:0)的航點(diǎn)信息,同時(shí)打開Bus Hound軟件選擇要監(jiān)控的設(shè)備并進(jìn)行捕獲操作,這時(shí)在MapSource選擇軟件界面選擇發(fā)送到設(shè)備按鈕,等待數(shù)據(jù)傳送完畢后,Bus Hound軟件界面就會(huì)出現(xiàn)需要的信息,重復(fù)上述過程輸入002(X:10,Y:10,H:10)得到需要的信息。
通過對(duì)比航點(diǎn)屬性信息可以得到名稱屬性、X坐標(biāo)、Y坐標(biāo)和高程等信息在MapSource 軟件傳輸數(shù)據(jù)包中的位置。在MapSource 航點(diǎn)屬性輸入界面還包含有深度、溫度等其它屬性信息,通過上述方法也可一一獲取。
WinUSB 是微軟公司提供的基于Windows 系統(tǒng)的USB 類設(shè)備驅(qū)動(dòng)工具,其架構(gòu)由內(nèi)核模式驅(qū)動(dòng)程序(Winusb.sys)和公開WinUSB 功能的用戶模式動(dòng)態(tài)鏈接庫(Winusb.dll)組成。使用這些功能,可以通過用戶模式軟件管理USB 設(shè)備[4],Winusb.lib 和Winusb.dll提供應(yīng)用程序?qū)用娴腁PI接口函數(shù)。
安裝設(shè)備驅(qū)動(dòng)程序需要提供INF文件,微軟公司提供了WinUSB.inf 文件模板,經(jīng)過簡單修改就能應(yīng)用到大部分的WinUSB類設(shè)備,主要是將設(shè)備的廠商識(shí)別碼(VID)和產(chǎn)品識(shí)別碼(PID)加入到INF 文件中。相關(guān)操作和介紹可以參考微軟的MSDN。
由于地球曲率的影響,地理坐標(biāo)并不能滿足地勘單位在施工時(shí)的需求,將地球上的點(diǎn)位坐標(biāo)化算到平面稱之為地圖投影。地圖投影的方法有很多,我國目前多采用高斯投影—克呂格投影。為實(shí)現(xiàn)目前我國常用北京54和西安80坐標(biāo)點(diǎn)位的批量輸入,需要將地理坐標(biāo)(B,L,H)轉(zhuǎn)換為平面直角坐標(biāo)系下的北京54 或西安80,實(shí)現(xiàn)該過程的方法為,首先利用簡化莫洛金斯基模型[5-7],將DX、DY、DZ、DA、DF轉(zhuǎn)換為DB和DL,然后將結(jié)果帶入高斯正算公式,最后得到需要的北京54或西安80坐標(biāo),將該過程代碼化以備后用。相關(guān)公式如下。
式(1)為簡化莫洛金斯基模型公式。
式(2)為高斯投影正算公式。
由于要用到Winusb 作為設(shè)備的驅(qū)動(dòng)程序,考慮到兼容的問題需要用C、C++、Visual C++等語言進(jìn)行應(yīng)用程序編寫。程序要包含Winusb.h、SetupAPI.h頭文件,關(guān)聯(lián)Winusb.lib、SetupAPI.Lib 庫文件。微軟在NT4.0 后的操作系統(tǒng)里都提供了很多以Setup?DiXXXXX 開頭的函數(shù),該系列函數(shù)提供了讀取設(shè)備信息和與設(shè)備通信的方法。SetupAPI.Lib 庫文件包含了SetupDiXXXXX 開頭的函數(shù)。程序的主要過程為應(yīng)用SetupDiGetClassDevs、SetupDiDestroyDeviceIn?foList、SetupDiEnumDeviceInterfaces、SetupDiGetInter?faceDeviceDetail 等系列函數(shù)查找和定位到GPS?map60CSx 設(shè)備,通過CreateFile 函數(shù)獲得設(shè)備句柄,然后利用WinUsb_Initialize、WinUsb_QueryDeviceIn?formation、WinUsb_QueryPipe、WinUsb_QueryInterfac?eSettings 等系列函數(shù)獲取設(shè)備通信方式。在此就不羅列上述函數(shù)的使用方法,有意者可參見MSDN,最后通過WinUsb_WritePipe 函數(shù)對(duì)包裝好的數(shù)據(jù)包寫入GPSmap60CSx設(shè)備。
為驗(yàn)證代碼是否可行,選擇與GPSmap60CSx 設(shè)備同公司產(chǎn)品LEGEND H 進(jìn)行實(shí)驗(yàn)操作,在記事本中依次編輯航點(diǎn)1、航點(diǎn)2、……航點(diǎn)12,隨機(jī)輸入以度為單位的坐標(biāo),運(yùn)行代碼后會(huì)在LEGEND H 手持機(jī)中看到相關(guān)航點(diǎn)信息。
本文結(jié)合地質(zhì)、物探、化探工作中的實(shí)際問題,提出了另外一種實(shí)現(xiàn)GPS 數(shù)據(jù)批量寫入的方式,實(shí)現(xiàn)了相關(guān)的代碼,這種方式相對(duì)于GPX 交換文件形式更加靈活,能同時(shí)修改多種相關(guān)屬性等優(yōu)點(diǎn)。