李庭威 王峰 汪進 夏佩 邱文添 龍保任 李學(xué)易
摘要:為了將高精度差分位置信息顯示在高德地圖上,通過搭建基于Python的服務(wù)器讀取rtklib傳來的位置信息,提取出經(jīng)緯度并傳給瀏覽器。通過編寫基于JavaScfipt的HTML文件,調(diào)用高德地圖API,利用AJAX技術(shù),在地圖上實時更新測量點的位置。實驗結(jié)果實現(xiàn)了多點高精度差分定位的可視化。
關(guān)鍵詞:rtklib;Python服務(wù)器;高德地圖;JavaScript;實時定位
1背景
GPS(Global Positioning svstem)全球定位系統(tǒng)現(xiàn)在已經(jīng)廣泛應(yīng)用于各行各業(yè),可以提供覆蓋全球的導(dǎo)航以及定位服務(wù)。高精度的GPS測量必須要采用載波相位觀測值。RTK定位技術(shù)基于載波相位觀測值,能夠?qū)崟r地提供測量點的三維定位坐標(biāo),而且可以精確到厘米級。
本項目用到的RTKLIB是日本東京海洋大學(xué)(Tokyo University of Marine Science and Technology)開發(fā)的開源程序包,供標(biāo)準(zhǔn)的GNSS全球?qū)Ш较到y(tǒng)使用。高德地圖是高德軟件開發(fā)的一款免費在線導(dǎo)航產(chǎn)品,被廣泛應(yīng)用于智能手機和電腦上。由于RTKLIB一次只能輸出一個信號,所以本項目通過打開多個RT—KLIB窗口并設(shè)置不同的輸出端口,傳給基于Python開發(fā)的多線程后臺。為了能在智能手機和電腦上都能實時顯示定位點的位置,本項目開發(fā)了適用于多平臺多終端的前端頁面,并利用AJAX(Asynchronous Javascript And XML,異步的Javascript與XML技術(shù)),使得不用刷新頁面也能在瀏覽器頁面的高德地圖中實時更新位置。
2高德地圖多點實時定位的實現(xiàn)
2.1搭建基于Python的服務(wù)器
Python是一種面向?qū)ο?、直譯式的電腦程序語言。它包含了一組功能完備的標(biāo)準(zhǔn)庫,能夠輕松完成很多常見的任務(wù)。本項目主要用到了Bottle框架。Bottle是一個簡單高效的遵循WSGI的微型python Web框架。說微型,是因為它只有一個文件。本項目用了Bottle框架的Route和Server特性,Route能把請求映射到函數(shù),建立簡潔動態(tài)的URLs。在瀏覽器請求URL的時候,bottle框架會根據(jù)URL調(diào)用與之相應(yīng)的函數(shù),然后將函數(shù)的返回值發(fā)送到瀏覽器。打開RTKLIB并設(shè)置好端口后,需要將數(shù)據(jù)傳給Python后臺,這里需要用到TCP(傳輸控制協(xié)議)和IPf網(wǎng)際協(xié)議)。所以在Python中需要用到socket編程??梢韵葎?chuàng)建TCP/IP套接字并綁定本地端口(RTKLIB傳送數(shù)據(jù)來的端口),然后接收從指定端口傳送過來的數(shù)據(jù)。
因為要接受多個RTKLIB端口傳送過來的數(shù)據(jù),所以這一步驟需要重復(fù)幾次。由于RTKLIB里的經(jīng)緯度格式與高德地圖中的不相同,所以在這里需要對RTKLIB傳來的經(jīng)緯度信息進行轉(zhuǎn)化。通過在代碼中添加print語句,可以在窗口中實時顯示各點的經(jīng)緯度信息(本項目用到了3個點),如圖1所示。得到的經(jīng)緯度信息需要實時傳送給前端頁面,所以需要用到Pvthon的ison模塊。JSON是一種輕量級的數(shù)據(jù)交換語言,以文字為基礎(chǔ),且易于讓人閱讀。盡管JSON是Javascript的一個子集,但JSON是獨立于語言的文本格式。Python的json模塊提供了一種很簡單的方式來編碼和解碼JSON數(shù)據(jù),可以利用{son.dumps方法可以對簡單數(shù)據(jù)類型進行編碼,然后將編碼后的JSON數(shù)據(jù)返回給前端頁面。此外,在運行Pvthon后臺時,還需要綁定與前端頁面通信的本地端口并自動打開前端的HTML文件。
2.2編寫基于Javascfipt的HTML文件
JavaScript是一門面向?qū)ο蟮哪_本語言,被廣泛應(yīng)用于web應(yīng)用開發(fā)。它常被用來向網(wǎng)頁添加各種各樣的動態(tài)功能,讓用戶能享受到流暢美觀的瀏覽器頁面。為了提高編寫效率,本項目采用了JavaScript的jQuery框架。iQuery封裝了JavaScript常用的功能代碼,優(yōu)化了對HTML文檔的操作、事件的處理以及Ajax交互。我們利用iQuery框架可以很方便地獲取從Pvthon后臺傳來的json格式的數(shù)據(jù)。
為了提高網(wǎng)站的美觀度以及適應(yīng)各種大小的瀏覽器頁面,我們采用了時下流行的Bootstrap框架。Bootstrap來自Twitter,是最受歡迎的HTML、CSS和JS框架,用于開發(fā)響應(yīng)式布局、移動設(shè)備優(yōu)先的WEB項目。利用Bootstrap中的柵格系統(tǒng)可以輕松布局適應(yīng)多種屏幕的瀏覽器界面。我們還調(diào)用了Bootstrap中的字體和按鈕樣式,讓整個頁面看上去更美觀。
由于我們要在高德地圖上顯示出測量點的位置,所以必須要調(diào)用高德地圖JavaSeriptAPI,它是由iavaScript語言編寫的應(yīng)用程序接口。我們需要編寫在高德地圖中添加點的函數(shù),這些點的圖標(biāo)可以從高德提供的網(wǎng)址上實時下載,為了區(qū)分不同測量點的序號,我們必須調(diào)用不同的圖標(biāo)。為了實時更新測量點的位置,我們調(diào)用了javaScript中的定時器函數(shù),使得前端頁面每隔半秒就向后臺請求一次數(shù)據(jù)。為了能把所有測量點合理的全部顯示在瀏覽器視口中,我們寫了一個按鈕,點擊它可以調(diào)用高德地圖API中的setFitView函數(shù),自動的縮放地圖,從而顯示所有測量點的位置。
2.3定位結(jié)果顯示
服務(wù)器和瀏覽器是通過HTTP(Hypertext Transfer Protocol,超文本傳輸協(xié)議)協(xié)議通信的。瀏覽器向服務(wù)器發(fā)送HTTP請求,服務(wù)器會在HTTP響應(yīng)中回送所請求的數(shù)據(jù)。所幸的是,使用Pvthon自帶的標(biāo)準(zhǔn)庫BaseHTTPServer就可以快速地搭建一個微型的HTTP服務(wù)器。搭建成功后,點擊最下方的地圖自適應(yīng)顯示按鈕,成功地把高精度差分測量點顯示在瀏覽器中了,如圖2所示。
3結(jié)束語
高精度差分能實現(xiàn)厘米級的定位,但是rtklib輸出的信息并不直觀。本項目通過編寫多線程的Pvthon服務(wù)器,從rtklib輸出的信息中提取出經(jīng)緯度,并傳送給瀏覽器。在編寫瀏覽器HTML文件時,我們采用了最新的Bootstrap框架,調(diào)用了高德地圖最新的API,將高精度差分測量點的位置信息直觀地顯示在了高德地圖上。