基于MaPX的校園導(dǎo)航系統(tǒng)設(shè)計
2.2 電子地圖基本功能實(shí)現(xiàn)
電子地圖基本功能包括選擇、標(biāo)注、縮小、放大、漫游等。采用MapX可以很容易的實(shí)現(xiàn)這些功能,下面以縮小功能為例,簡單介紹一下程序里如何實(shí)現(xiàn)地圖縮小。
添加一個新的Toolbar資源。輸人標(biāo)題“IDR_TOOL_BARMAP”。在“IDR_TOOLBARMAP”下添加按鈕,在其上繪制縮小圖形來表示“縮小”,其ID為ID_MAP_TOOL_ZOOMOUT。打開類向?qū)Вx擇視圖類CMapXView.為菜單項(xiàng)ID_MAP_TOOL_ZOOMOUT添加COOMMAND消息映射函數(shù)OnMapToolZoomout(),并編輯代碼如下:本文引用地址:http://www.ex-cimer.com/article/197856.htm
編譯運(yùn)行程序.點(diǎn)擊縮小按鈕,在電子地圖上單擊鼠標(biāo)就會實(shí)現(xiàn)電子地圖的縮小功能。可用相同方法實(shí)現(xiàn)其他標(biāo)準(zhǔn)工具的功能。
2.3 GPS數(shù)據(jù)的接收和處理
此模塊完成了從串口讀取數(shù)據(jù),并對數(shù)據(jù)按照GPS所遵循的NMEA0183協(xié)議進(jìn)行處理,得出經(jīng)緯度坐標(biāo)等信息的功能。此模塊包括兩個部分串口通信和數(shù)據(jù)處理。
由于GPS模塊每一秒更新一次數(shù)據(jù),當(dāng)上空有4顆衛(wèi)星時串口會源源不斷的接收到定位數(shù)據(jù).為了在對串口實(shí)時監(jiān)控的同時還可以在前臺進(jìn)行一些其他的操作。采用基于多線程的CSerialPort類的串口通信方法可以很好的解決這一問題。
此模塊的工作流程可分為以下幾步:(1)利用CSerial-Port的InitPort()初始化串口配置。(2)如果配置成功用StartMonitoring()打開串口并創(chuàng)建監(jiān)視串口的線程。(3)在相應(yīng)的類里添加響應(yīng)WM_COMM_RXCHAR消息的消息處理函數(shù),并且在其中做接收字符處理。(4)添加定時器.在OnTimer中處理NMEA 0183格式的GPS定位數(shù)據(jù).將提取到的緯度數(shù)據(jù)保存到相應(yīng)類上的成員變量中。
2.4 目標(biāo)定位和播報
該模塊從GPS數(shù)據(jù)處理模塊中得到經(jīng)緯度坐標(biāo)等信息,并且把它賦值給目標(biāo)圖元,通過定時器更新圖元位置從而完成實(shí)時定位。
由于程序?qū)崟r接收定位數(shù)據(jù)來更新圖元的位置.就需要程序頻繁的刷新整個圖層,就會影響效率。動態(tài)圖層的目的是為了加速圖層的刷新率從而提高效率,設(shè)置動態(tài)圖層后。每次刷新都只刷新動態(tài)圖層,這樣就很好的解決了這個問題。示例代碼如下:
程序最后運(yùn)行界面如下:
3 結(jié)束語
本文在GIS二次開發(fā)日新月益的背景下.結(jié)合校園實(shí)際特點(diǎn)開發(fā)了基于MapX的校園導(dǎo)航系統(tǒng)。經(jīng)過調(diào)試,程序運(yùn)行穩(wěn)定,實(shí)現(xiàn)了電子地圖放大、縮小、漫游等功能。程序由Mi-crosoft Visual C++6.0編譯、在Windows XP下運(yùn)行通過。
評論