基于MFC和OpenGL的三維車載導(dǎo)航系統(tǒng)
劉旭東1,2,葛俊杰2
(1.煙臺職業(yè)學(xué)院 科研處,山東 煙臺 264670;2. 煙臺職業(yè)學(xué)院 信息工程系,山東 煙臺 264670)
摘要:近年來,隨著我國經(jīng)濟(jì)的迅猛發(fā)展,城市機(jī)動(dòng)車的數(shù)量和交通流量不斷增加,交通堵塞頻繁發(fā)生,給人們的出行帶來極大的不便。因此,開發(fā)設(shè)計(jì)一種智能車載導(dǎo)航定位系統(tǒng),是實(shí)現(xiàn)我國道路智能化管理的迫切需要。系統(tǒng)采用Visual C++設(shè)計(jì),使用SQL SERVER為后臺數(shù)據(jù)庫,使用OpenGL進(jìn)行三維場景繪制。不僅提供了傳統(tǒng)車載導(dǎo)航所需的最優(yōu)路徑查詢、語音提示以及信息查詢等功能,還實(shí)現(xiàn)了測距、智能返航、行駛過程視角轉(zhuǎn)換以及新增點(diǎn)等功能。
關(guān)鍵詞:GIS;車載導(dǎo)航;MFC;OPENGL
收稿日期:2015-08-11
作者簡介:劉旭東(1976-),男,山東龍口人,煙臺職業(yè)學(xué)院科研處副教授,碩士.
中圖分類號:U46
1系統(tǒng)可行性分析
現(xiàn)代人對于車載導(dǎo)航系統(tǒng)已經(jīng)不是很陌生,汽車導(dǎo)航系統(tǒng)為地球表面上每一塊土地提供了一個(gè)全新的、瞬時(shí)可知的地址,而且通過GIS/GPS的應(yīng)用,該智能車載導(dǎo)航定位系統(tǒng)基本包含了現(xiàn)有車載導(dǎo)航系統(tǒng)的全部功能,主要包括導(dǎo)航功能、語音提示功能、測速功能、測距功能、智能返航、在虛擬環(huán)境中應(yīng)用模擬車載系統(tǒng)、交互式視角轉(zhuǎn)換、信息查詢功能、新增點(diǎn)功能等。
1.1 技術(shù)可行性分析
人工智能的普及與掌握,如算法分析,語音識別等,使軟件開發(fā)工作變得日益簡單。使用MicrosoftVC++6.0開發(fā)環(huán)境,利用3dmax與OpenGL等開發(fā)技術(shù),開發(fā)過程不是很長且難度適中。
1.2 經(jīng)濟(jì)可行性分析
本系統(tǒng)是在OpenGL技術(shù)基礎(chǔ)上開發(fā)的三維車載導(dǎo)航系統(tǒng),利用宿舍和機(jī)房電腦,圖書館等方便的資源,不需要太多人力和物力就可以設(shè)計(jì)并實(shí)現(xiàn),考慮到整個(gè)系統(tǒng)所需要的硬件和軟件環(huán)境,本系統(tǒng)的投資較小,具有經(jīng)濟(jì)上的可行性。
1.3 開發(fā)及應(yīng)用環(huán)境
VisualC++6.0是微軟公司推出的開發(fā)Windows環(huán)境下面向?qū)ο蟮目梢暬晒ぞ?。它提供了功能?qiáng)大的MFC類庫,開發(fā)者只需做少量的工作就可以得到功能齊全的Windows應(yīng)用程序。MFC使編程工作變得更加輕松容易。
SQLServer是基于客戶機(jī)/服務(wù)器(Client/Server)模型的新一代大型關(guān)系型數(shù)據(jù)庫管理系統(tǒng)(DBMS),為企業(yè)的數(shù)據(jù)管理提供強(qiáng)大的支持,它在電子商務(wù)、數(shù)據(jù)庫解決方案和數(shù)據(jù)倉庫等應(yīng)用中起著重要的作用。它可以將VB、VC++作為客戶端開發(fā)工具。隨著其產(chǎn)品性能的不斷改善和擴(kuò)大,SQLServer在數(shù)據(jù)庫系統(tǒng)領(lǐng)域已經(jīng)占有非常重要的地位。
OS:Windows2000以上(Vista除外),編譯和測試軟件:VisualC++6.0(提供編程環(huán)境,編譯環(huán)境),輔助庫:OpenGL庫。
2設(shè)計(jì)技術(shù)簡介
OpenGL是OpenGraphicsLib的縮寫,是一套三維圖形處理庫,也是該領(lǐng)域的工業(yè)標(biāo)準(zhǔn)。OpenGL是科學(xué)計(jì)算、專業(yè)圖形處理等高端應(yīng)用領(lǐng)域的標(biāo)準(zhǔn)圖形庫。它被設(shè)計(jì)成獨(dú)立于窗口、獨(dú)立于硬件,運(yùn)行在具有操作系統(tǒng)的各類計(jì)算機(jī)上,在網(wǎng)絡(luò)環(huán)境下以客戶機(jī)/服務(wù)器(Client/Server)模式工作。
3dsMax(原名:3DStudioMax),是Autodesk傳媒娛樂部開發(fā)的、運(yùn)行在Win32和Win64平臺上的全功能三維計(jì)算機(jī)圖形軟件。它首先開始運(yùn)用在電腦游戲中的動(dòng)畫制作,后來更進(jìn)一步開始參與影視片的特效制作,例如最后的武士,X戰(zhàn)警II等。除外,朱邦復(fù)工作室所開發(fā)的“導(dǎo)演平臺”也是以Plug-In方式建立在這個(gè)軟件上。
3系統(tǒng)概要設(shè)計(jì)
融合三維虛擬場景漫游和電子交通GIS系統(tǒng),將兩者巧妙的聯(lián)系在一起,使用戶在更加逼真的三維場景中,實(shí)現(xiàn)交通信息的查詢,測速,測距,智能導(dǎo)航等二維電子地圖應(yīng)有的功能;并提供第一人稱與第三人稱視角的切換功能,從而達(dá)到漫游與導(dǎo)航雙重功能的實(shí)現(xiàn);全程語音提示,使得用戶使用更加方便。另外,本系統(tǒng)還有收音機(jī)、音樂播放等功能。
車載導(dǎo)航系統(tǒng)實(shí)現(xiàn)如下功能:導(dǎo)航、語音提示、測速、測距、智能返航、虛擬環(huán)境模擬車載導(dǎo)航系統(tǒng)、新增點(diǎn)、視角轉(zhuǎn)換、信息查詢、音樂、收音機(jī)等。根據(jù)這些功能,系統(tǒng)可分為以下8個(gè)模塊:
①GIS操作模塊,主要包括導(dǎo)航、測距、測速、電子地圖放縮及移動(dòng)、智能返航等功能;
②語音提示模塊,主要包括全程轉(zhuǎn)向及重要建筑物提示功能;
③三維場景生成模塊,三維場景的顯示;
④虛擬場景漫游模塊,在虛擬環(huán)境模擬車載導(dǎo)航系統(tǒng)功能;
⑤信息查詢模塊,一定范圍信息查詢、制定地點(diǎn)信息查詢、最短路徑查詢等三種信息查詢方式;
⑥新增點(diǎn)模塊,在電子地圖上實(shí)現(xiàn)點(diǎn)的添加功能;
⑦音樂播放模塊,播放音樂功能;
⑧車內(nèi)儀表盤模塊,汽車速度指針及發(fā)動(dòng)機(jī)轉(zhuǎn)速指針的偏轉(zhuǎn)。
語音提示模塊、信息查詢模塊的最短路徑查詢以及GIS模塊的導(dǎo)航功能、智能返航功能都要共享同一個(gè)最短路徑關(guān)鍵點(diǎn)數(shù)組。
數(shù)據(jù)庫表的描述:
①Detail表——存儲(chǔ)場景中建筑物的詳細(xì)信息:編號、坐標(biāo)、建筑物的長度和寬度,最近路的坐標(biāo)等,用于輸入查詢,Detail見表1。
②KeyPoint表——存儲(chǔ)路上的關(guān)鍵點(diǎn)的信息:編號和坐標(biāo),用于最短路徑和智能返航,KeyPoint見表2。
③Point表——存儲(chǔ)路上的信息點(diǎn),用于最短路徑,Point見表3。
④Road表——存儲(chǔ)路的信息,編號,起始點(diǎn)和終點(diǎn)的坐標(biāo),以及路的名稱。用于輸入查詢,Road見表4。
表1Detail表表2KeyPoint表
表3 Point表 表4 Road表
4系統(tǒng)實(shí)現(xiàn)
4.1 啟動(dòng)界面
由于場景較大,加載時(shí)間比較長,增加啟動(dòng)動(dòng)畫過程,使客戶既可以對我們的系統(tǒng)有一個(gè)大概的了解,又使客戶不會(huì)在這段時(shí)間感到枯燥。該啟動(dòng)畫面的實(shí)現(xiàn)我們采用雙線程同時(shí)運(yùn)行,啟動(dòng)界面如圖1所示:
圖1 啟動(dòng)界面
4.2 最短路徑
最短路徑是車載導(dǎo)航系統(tǒng)最基本的功能之一,我們提供了最終最短路徑的尋求方式:①當(dāng)前點(diǎn)到任意點(diǎn)最短路徑,②任意兩點(diǎn)的最短路徑。這兩種最短路徑的實(shí)現(xiàn)原理是一樣的,即:首先在二維電子地圖上選取點(diǎn)(根據(jù)不同的需求選擇一個(gè)或兩個(gè)),然后查詢數(shù)據(jù)庫得到選擇點(diǎn)的序號,再調(diào)用計(jì)算最短路徑函數(shù)ShortPath(intstart,intend)計(jì)算最短路徑上的關(guān)鍵點(diǎn),最后繪制計(jì)算出的最短路徑。如圖2所示:
圖2 最短路徑
主要代碼如下:
//查詢中間點(diǎn)的過程用到了DIKSTRA算法,但做了一定改進(jìn),即最短路徑的關(guān)鍵點(diǎn)按順序輸出,方便最短路徑的顯示
for(w=1;w<=200;w++)
if(final[w]==0&&min { D[w]=min+G.arcs[v][w]; for(j=1;j<=200;j++) { BeginLink[w][j]=BeginLink[v][j]; if(w==end) { if(BeginLink[v][j]==1)//如果j是最短路徑上的點(diǎn),應(yīng)當(dāng)知道它是第幾個(gè),從而按順序按順尋顯示 order[final[j]]=j; else order[final[j]]=0; } }BeginLink[w][w]=1; } 4.3 智能返航 智能返航功能是客戶在選擇最短路徑后,系統(tǒng)自動(dòng)記錄行駛軌跡,待用戶想沿原始路線返回時(shí),啟動(dòng)“智能返航”,即可繪制出用戶的行車路線。如圖3所示: 圖3 智能返航 主要代碼如下: if(g_DrawCurrent==6)//記錄終點(diǎn)并執(zhí)行畫線 { if(m_bFindEnd) { m_bFindEnd=false; m_NavKeyPoint[++m_NavLast].x= (int) (CCamera::m_Position.x*240/1000); m_NavKeyPoint[m_NavLast].y= (int) (240+CCamera::m_Position.z*240/1000); } CPenpen(PS_SOLID, 2,RGB(248, 7, 0)); CPen*oldpen=ht.SelectObject(&pen); ht.MoveTo((int)(m_NavKeyPoint[0].x*blc/240+m_xStart),(int)(m_NavKeyPoint[0].y*blc/240+m_yStart)); …} 4.4 信息查詢 圖4 信息查詢 輸入查詢是車載導(dǎo)航系統(tǒng)的基本功能之一,用戶可以在不確定目的地點(diǎn)的情況下,查詢兩點(diǎn)之間的最短路徑;另外可以進(jìn)行一定范圍的信息查詢,也可以查詢特定地點(diǎn)的地理位置。信息查詢對話框如圖4所示: 三種查詢方式的實(shí)現(xiàn)原理是一樣的,即首先獲得Combobox的信息,再根據(jù)相應(yīng)要求做計(jì)算,最后在二維電子地圖上繪制出需要顯示的信息。下面以范圍信息查詢?yōu)槔f明實(shí)現(xiàn)原理。 主要代碼如下: intrange=atoi(RangeStr); if(m_DetailSet.Open()) { m_DetailSet.MoveFirst(); while(!m_DetailSet.IsEOF())//根據(jù)類型距離判斷目標(biāo)信息 { if(m_DetailSet.m_Type==g_ContentType&&sqrt((g_point.x-m_DetailSet.m_CenterX)*(g_point.x-m_DetailSet.m_CenterX)+(g_point.y-m_DetailSet.m_CenterY)*(g_point.y-m_DetailSet.m_CenterY)) g_SelectArr[g_t++]=m_DetailSet.m_ID; m_DetailSet.MoveNext(); } g_ContentType=0; m_DetailSet.Close(); } 4.5 語音提示 語音提示也是車載導(dǎo)航系統(tǒng)的常用功能之一。我們的語音提示主要用于兩個(gè)方面,一是轉(zhuǎn)彎語音提示,二是重要建筑物提示。轉(zhuǎn)彎語音提示的實(shí)現(xiàn)原理是根據(jù)當(dāng)前點(diǎn)判斷汽車是否轉(zhuǎn)向,如果判斷出轉(zhuǎn)向,調(diào)用需要轉(zhuǎn)向的語音;重要建筑物提示的實(shí)現(xiàn)原理是根據(jù)將二維電子地圖上的建筑物劃分為不同的區(qū)域,當(dāng)汽車第一次進(jìn)入該區(qū)域時(shí),調(diào)用此區(qū)域的語音。 主要代碼如下: CStringstrz="SoundData/10z.mp3"; CStringstry="SoundData/10y.mp3"; if(c<=1.0f) { d=m_TempPoint3.y-m_TempPoint2.y; if(a>=0) { if(d<-5&&m_bPlay) //左拐 { m_Mp3Music.Play(strz); m_bPlay=false; } elseif(d>5&&m_bPlay) //右拐 { m_Mp3Music.Play(stry); m_bPlay=false; } } else …} 5系統(tǒng)測試及結(jié)果分析 5.1 系統(tǒng)測試 系統(tǒng)的測試嚴(yán)格遵循軟件測試中的測試原則,系統(tǒng)采用黑盒的方法,讓程序設(shè)計(jì)之外的人員,在事先不了解程序設(shè)計(jì)的邏輯結(jié)構(gòu)的條件下,以隨機(jī)方式進(jìn)行導(dǎo)航、語音提示、測速、測距、智能返航、虛擬環(huán)境模擬車載導(dǎo)航系統(tǒng)、新增點(diǎn)、視角轉(zhuǎn)換、信息查詢、音樂、收音機(jī)等操作。經(jīng)過進(jìn)行反復(fù)的測試和修改,使系統(tǒng)功能逐步完善。 5.2 結(jié)果分析 系統(tǒng)網(wǎng)站開發(fā)環(huán)境采用VisualC++6.0和SQLServer數(shù)據(jù)庫。系統(tǒng)安裝方便簡潔,運(yùn)行安全可靠。系統(tǒng)的功能基本達(dá)到預(yù)期目標(biāo),在三維場景中實(shí)現(xiàn)了傳統(tǒng)車載導(dǎo)航系統(tǒng)的的各種功能,也可實(shí)現(xiàn)在三維場景中漫游,具有一定的借鑒和參考價(jià)值。 6結(jié)束語 開發(fā)設(shè)計(jì)的三維空間模擬車載導(dǎo)航系統(tǒng)已經(jīng)基本實(shí)現(xiàn)了導(dǎo)航、語音提示、測速、測距、智能返航、虛擬環(huán)境模擬車載導(dǎo)航系統(tǒng)、新增點(diǎn)、視角轉(zhuǎn)換、信息查詢、音樂、收音機(jī)等功能,實(shí)現(xiàn)了程序最初的設(shè)計(jì)目標(biāo),適合在實(shí)際中應(yīng)用。 參考文獻(xiàn): [1]徐明亮,盧紅星,王晚.OpengGL游戲編程[M].北京:機(jī)械工業(yè)出版社,2008. [2]侯俊杰.深入淺出MFC(第二版)[M].武漢:華中科技大學(xué)出版社,2001. [3]陳建春.VisualC++ 開發(fā)GIS系統(tǒng)(第2版)[M].北京:電子工業(yè)出版社,2004. [4]殷人昆,陶永雷,謝若陽,盛徇華.數(shù)據(jù)結(jié)構(gòu)——用面向?qū)ο蠓椒ㄅcC++描述[M].北京:清華大學(xué)出版社,2006. [5]高恩婷.基于VC++的OpenGL三維應(yīng)用程序的設(shè)計(jì)[J]. 蘇州大學(xué)學(xué)報(bào)(自然科學(xué)版),2007(4). [6]周揚(yáng),劉永濤.基于OpenGL的事故三維綜合演示平臺[J].重慶理工大學(xué)學(xué)報(bào)(自然科學(xué)版),2015(4). [7]程飛.基于MFC與OpenGL的可視化機(jī)械仿真設(shè)計(jì)系統(tǒng)[J].五邑大學(xué)學(xué)報(bào)(自然科學(xué)版),2014(3). (責(zé)任編輯侯中巖)