【正文】
編程工作量,使開發(fā)者避開某些應用的具體編程,直接調用控件,實現這些具體應用,不僅可以縮短程序開發(fā)周期,使編程過程更簡潔,用戶界面更友好,可以使程序更加靈活、簡便。這種方式省時省心,但進行二次開發(fā)的宏語言,作為編程語言只能算是二流,功能極弱,用它們內蒙古科技大學畢業(yè)設計 說明書(畢業(yè) 論文 ) 5 來開發(fā)應用程序仍然不盡如人意。該屬 性在設計時無效,在運行時為只讀。Clear To Send 是調制解調器發(fā)送到相聯計算機的信號,指示傳輸可以進行。例如,當在 CD(Carrier Detect)線或 RTS(Request To Send)線上有字符到達或發(fā)生了改變,在這種情況下,可以使用 MSComm 控件的 OnComm 事件捕獲和處理這些通信事件。 VC++應用程序的開發(fā)主要有兩種模式,一種是 WIN API 方式 ,另一種則是 MFC方式,傳統(tǒng)的 WIN API 開發(fā)方式比較繁瑣,而 MFC 則是對 WIN API 再次封裝,所以MFC 相對于 WIN API 開發(fā)更具備效率優(yōu)勢。 內蒙古科技大學畢業(yè)設計 說明書(畢業(yè) 論文 ) 2 MapX 為開發(fā)人員提供了一個快速、易用、功能強大的地圖化組件。 VC++是目前較流行的可視化開發(fā)編程工具之一,支持面向對象和事件驅動機制的程序開發(fā),利用其強大的集成開發(fā)環(huán)境,程序員僅需要較少代碼即可生成標準的“ Windows” 界面,并且能在 VC 開發(fā)平臺下 可以較為方便的集成組件。在集成二次開發(fā)的基礎上,首先實現了地圖的導入、地圖 放大縮小及 圖層控制等 電子導航 的 基本功能, 其次 以測量 折線 距離為例實現了自定義工具的功能, 再次 介紹了最優(yōu)路徑分析,最后實現 GPS 導航功能。 關鍵詞: 電子導航; GIS 開發(fā); VC++; MapX 控件; 最優(yōu)路徑 內蒙古科技大學畢業(yè)設計 說明書(畢業(yè) 論文 ) II Electronic Navigation Systems Based On VC++ Abstract Since the beginning of 1960s,Geographic Information System (GIS) has gradually bee a mature technology. In transportation, tourism, environment and many other fields of application GIS has been accepted by an increasing number of users for the people working and living as a powerful tool. The design used VC + + as a development platform, MapX control as a graphics platform, MSComm control as a munications has devised the GIS applications such as electronic navigation Basic functions(zoom control,the whole map, Roaming, for example), Calculating the distance, Layer Control, Analysis of the optimal path and GPS Navigation Features. This article has described the design of electronic navigation systems background, MapX control,VC++ and MSComm control. It has analyzed GIS development in three ways and proposed system design:Secondary development of integrated. First of all, It has realized the basic functions of GIS such as the insert map,Layer Control, Zoom control in the integrated development of the basis of secondary. Second, it has used a custom tool as an example to measure the distance, and then it has introduced the analysis of the optimal path. Finally, it has realized GPS navigation. Key words: Electronic navigation。 本文主要介紹利用 MapX 控件,采用 VC++編程語言進行組件式 GIS 應用軟件開發(fā)的主要過程和基本模式,來實現電子導航的目的。在 VB, Delphi,PowerBuilder, VC 等可視化開發(fā)環(huán)境中,只需在設 計階段將 MapX 控件放入窗體中,并對其進行編程,設置屬性或調用方法或相應事件,即可實現數據可視化,專題分析,地理查詢,地理編碼等豐富的地圖信息系統(tǒng)功能。 VC 基于 C, C++語言,主要由是 MFC 組成,是與系統(tǒng)聯系非常緊密的編程工具,它兼有高級,和低級語言的雙重性,功能強大,靈活,執(zhí)行效率高,幾乎可說 VC 在 Windows 平臺無所不能。 OnComm 也可以捕獲和處理通信中的錯誤。該屬性在設計時無效,在運行時為只讀。 Settings 屬性 : 設置并返回波特率、奇偶校驗、數據位、停止位參數。 (3)集成二次開發(fā) 集成二次開發(fā)是指利用專業(yè)的 GIS 工具軟件,如 MapInfo、 ArcView 等,實現 GIS的基本功能,以通用軟件開發(fā)工具尤其是可視化開發(fā)工具,如 Visual C++、 Delphi、 Visual Basic、 Power Builder 等為開發(fā)平臺,進行二者的集成開發(fā)。與利用 OLE Automation 技術作為服務器的 MapInfo 相比,利用控件開 發(fā)速度快,占用資源少,而且易實現許多底層的編程和開發(fā)功能 [4]。 1) 在 文件中,加入 對象的頭文件,并聲明 CMapX 類型的變量 m_ctrlMapX。 代碼如下: int CVCDZDHView::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (!(NULL,WS_VISIBLE,CRect(0,0,100,100),this,IDC_MAP)) return 1。 void CVCDZDHView::OnSetFocus(CWnd*pOldWnd) { 內蒙古科技大學畢業(yè)設計 說明書(畢業(yè) 論文 ) 9 CView::OnSetFocus(pOldWnd)。打開類向導,選擇視圖類 CVCDZDHView,為菜單項內蒙古科技大學畢業(yè)設計 說明書(畢業(yè) 論文 ) 10 ID_ZOOM_IN 添加 COMMAND 消息映射函數 OnZoomIn(),并編輯代碼如下。 = VT_ERROR。 } catch (COleException *e) { eReportError()。 define MYTOOL_DISTANCE 1 然后,在 文件中的 OnCreate()函數中加入如下代碼,從而創(chuàng)建一個用戶自定義工具。切換到 VCDZDHView. h 文件中,聲明事件響應函數,代碼如下。 n=()。 (總距離為 :%f公里 ,dDistanceTot)。 調用自定義工具 在“工具”下拉菜單中添加“折線距離”子菜單項, ID 為 ID_DISTANCE_TOOL。 實現過程及其算法分析 Dijkstra(迪杰斯特拉 )算法 是典型的最短路徑路由算法,用于計算一個節(jié)點到其他所有節(jié)點的最短路徑。 內蒙古科技大學畢業(yè)設計 說明書(畢業(yè) 論文 ) 19 3. 遍歷考察這個點的子節(jié)點。從所有未標記的結點中, 選取 dj 中最小的一個 i: di=min[ dj, 所內蒙古科技大學畢業(yè)設計 說明書(畢業(yè) 論文 ) 20 有未標記的點 j] ,點 i就被選為最短路徑中的一點,并設為已標記的。 public VERTEX Prev。//每個 Link 對象的 v1 都應該指向它所附屬的點節(jié)點 內蒙古科技大學畢業(yè)設計 說明書(畢業(yè) 論文 ) 21 public VERTEX v2。 } VERTEX 類用來存儲點節(jié)點, Link 類用來存儲鄰接關系, SearchLink 是一個臨時的中間鄰接關系,在尋徑時替代 VERTEX 實例進行運算,用來維持鄰接多重表。 RoadNode[indexP].Neighbor=null。 pFeatCsrL=(null,false)。 p2=()。 =(double)(int)((Weight))。 } 點的數組建立完成之后,可以開始遍歷線層元素,每取得一個線元素,則可以得到首尾節(jié)點的 ID,根據首尾節(jié)點 ID(即首尾節(jié)點在數組中的索引)得到首尾節(jié)點,分別為首尾節(jié)點建立鄰接關系 vLink1 和 vLink2,從線元素獲得首尾節(jié)點的過程的時間復雜度為 O( 1),而外層 while 循環(huán)是遍歷線層元素,時間復雜度為 O( n),經過這一過程 ,拓撲關系基本建立完成,由于采用數組存儲 VERTEX 元素的目的是建立索引,減少建立拓撲關系時點的搜索時間,因此,拓撲關系建立完成后,為了方便運算,也為了盡量減少數組元素所占用的大塊內存區(qū)域,把 VERTEX 元素從數組中摘下并建立環(huán)狀鏈表: vWork=vHead。 } } =vHead。=vWork。 } 由于鄰接多重表可以重復使用,因此 在一次尋徑后,鏈表中的節(jié)點的一些屬性值可能被改變,因此需要重新初始化節(jié)點的屬性值,如查詢狀態(tài) Searched、最短路徑前導節(jié)點 ShortPathPre,最短路徑值 Weight 等。 =。!=2)//一旦鏈表 sOpen 變?yōu)榭眨蚪K點內蒙古科技大學畢業(yè)設計 說明書(畢業(yè) 論文 ) 27 的最短路徑已經找到,則查詢結束 { sTemp=。 =1。 =。外循環(huán)用來遍歷鏈表內蒙古科技大學畢業(yè)設計 說明書(畢業(yè) 論文 ) 29 sClose,直到鏈表 sClose 變?yōu)榭?,或者最短路徑的終點 vTail 的最短路徑被找到( Searched字段變?yōu)?2)。現不僅應用于物理勘探、電離層測量和航天器導航等諸多民用領域,在軍事領域更是取得了廣泛的應用 —— 在彈道導彈、野戰(zhàn)指揮系統(tǒng)、精確彈道測量以及軍用地圖快速測繪等領域均大量采用了衛(wèi)星導航定位技術。嚴格而言,載波相位應被稱為載波拍頻相位,它是收到的受多普勒頻移影響的衛(wèi)星信號載波相位與接收機本機振蕩產生信號相位之差。在定位觀測時 ,若接收機相對于地球表面靜止,則稱為靜態(tài)定位,在進行控制網觀測時,一般均采用這種方式由幾臺接收機同時觀測,它能最太限度地發(fā)揮 GPS 的定位精度,專用于這種目的的接收機被稱為大地型接收機,是接收機中性能最好的一類。打開通信端口 ,即將 PortOpen 屬性設為 True。//1:表示 以二進制方式檢取數據 (1)。//接收每字節(jié)的平均允許時間 = 0。 = ONESTOPBIT 。olRead)。 內蒙古科技大學畢業(yè)設計 說明書(畢業(yè) 論文 ) 35 3 緯度 , 格式為 4 標明南北半球 , N 為北半球、 S 為南半球 5 徑度,格式為 6 標明東西半球, E 為東半球、 W 為西半球 7 地面上的速度,范圍為 到 8 方位角,范圍為 到 度 9 日期 , 格式為 ddmmyy 10 地磁變化,從 到 度 11 地磁變化方向,為 E 或 W 至于其他幾種幀格式,除了特殊用途外,平時并不常用,雖然接收機也在源源不斷地向主機發(fā)送各種數據幀,但在處理時一般先通過對幀頭的判斷而只對 $GPRMC幀進行數據的提取處理。 if(Data[i]==10){//幀尾 } if(Data[i]==39。 break。 內蒙古科技大學畢業(yè)設計 說明書(畢業(yè) 論文 ) 37 } } } 現在已將所需信息提取到內存,即時間、日期以及經緯度分別保存在 CString 型變量 m_sTime、 m_Data、 m_sPositionY 和 m_sPositionX 中。 //提取出月份 //buf第 3 字節(jié)為天, 5 字節(jié)為年,提取方法同上 ?? ::strcpy(buf,m_sPositionY)。 (%c%c%c%c%c%c%c,buf[3],buf[4],buf[5],buf[6],buf[7],buf[8],buf[9])。//提取出經度 (單位為分 ) } if(()==9) //經度未超過 90 度 (如東經 89 度 ) { //處理方法同上,只是 buf的第 0、 1 字節(jié)為度數, 2~9 為分數。 PositionV