王海波,王兆華
(中國傳媒大學(xué)計算機(jī)與網(wǎng)絡(luò)中心,北京 100024)
LBS(Location Based Service,基于位置的服務(wù))[1]是指通過移動運(yùn)營商的無線電通訊網(wǎng)絡(luò)(如GSM網(wǎng)、CDMA網(wǎng))或外部定位方式(如GPS)獲取移動終端用戶的位置信息。隨著Foursquare、Facebook等國外網(wǎng)站的興起,LBS服務(wù)成為互聯(lián)網(wǎng)以及移動互聯(lián)網(wǎng)中非常重要的一種應(yīng)用。在W3C推出的HTML5規(guī)范中,制定了地理位置定位相關(guān)的API[2],極大地推動了LBS應(yīng)用的發(fā)展。
各主流瀏覽器在實現(xiàn)HTML5地理定位的相關(guān)規(guī)范時,雖然對外提供了統(tǒng)一的接口,但內(nèi)部采用了不同的實現(xiàn)方法和機(jī)制。本文通過對瀏覽器實現(xiàn)HTML5地理定位機(jī)制的分析,指出了目前瀏覽器地理定位機(jī)制的缺陷,并提出了對這一問題進(jìn)行改進(jìn)的方法。
為了定位某一個設(shè)備,可以用一組數(shù)字來表示它在地球上的位置。在地理坐標(biāo)系中,坐標(biāo)由經(jīng)度、緯度和海拔高度組成[3]。
地球上的水平參考線是緯線,兩條緯線的間距大約是69英里。地球上的垂直參考線是經(jīng)線,在南極點和北極點匯合。在度量陸地上某一點的高度時,通常的基準(zhǔn)是地球的平均海平面。
地理位置信息并不總是準(zhǔn)確無誤的,它依賴于進(jìn)行地理定位時采用的方法。
(1)GPS。
GPS衛(wèi)星連續(xù)不斷地發(fā)射信息,支持GPS的設(shè)備或接收器可以對這些信息進(jìn)行解析。接收器通過測定GPS衛(wèi)星陣列中可見衛(wèi)星發(fā)射信號的時間來計算自己的位置。
(2)IP地址。
IP地址是指定給任何上網(wǎng)設(shè)備的一個唯一編號。多數(shù)情況下,IP地址是通過地區(qū)性的注冊機(jī)構(gòu)按照地區(qū)指定給互聯(lián)網(wǎng)服務(wù)提供商的。因此,通過IP地址通常能獲得設(shè)備所在的國家、地區(qū)和城市。
(3)GSM/CDMA Cell ID。
Cell ID是特定的蜂窩網(wǎng)絡(luò)中標(biāo)識每一部移動設(shè)備的唯一編號。利用三角測量技術(shù),可以確定移動設(shè)備的緯度和經(jīng)度,從而實現(xiàn)地理定位。
(4)Wi-Fi和藍(lán)牙的MAC地址。
MAC地址是設(shè)備的物理地址,通常由網(wǎng)絡(luò)接口卡制造商指定。這一地址原則上是固定不變并且是全球唯一的標(biāo)識符。
在W3C制定的Geolocaiton API中,規(guī)定了如何使用腳本訪問主機(jī)設(shè)備的地理位置信息。其中,最重要的就是Geolocation對象,它通過getCurrentPositon方法獲得地理定位信息。獲得信息成功后,地理定位信息保存在Coordinates對象中,它的主要屬性信息如表1所示。
表1 地理定位信息
目前主流的瀏覽器基本實現(xiàn)了W3C組織制定的Geolocaiton API相關(guān)的規(guī)范。本文采用如圖1所示的方法來剖析瀏覽器如何獲得地理定位信息。
圖1 瀏覽器地理定位機(jī)制研究方法
筆者安裝一個代理服務(wù)器軟件,并設(shè)置瀏覽器經(jīng)過這一代理服務(wù)器的轉(zhuǎn)發(fā)來訪問網(wǎng)絡(luò),從而獲得瀏覽器在獲取地理定位信息時中間產(chǎn)生的數(shù)據(jù)流。本文使用Fiddler這一代理服務(wù)器軟件。
IE 向 inference.location.live.net這一地理定位服務(wù)器發(fā)出請求,并從請求的結(jié)果中獲得客戶端的地理位置信息,如圖2所示。
圖2 IE瀏覽器的地理定位機(jī)制
為了防止信息在傳輸中被竊取,IE使用HTTPS協(xié)議與地理位置服務(wù)器進(jìn)行交互,并使用post方法來進(jìn)行數(shù)據(jù)的請求。請求的信息中包括時間戳、應(yīng)用ID、跟蹤ID、客戶端所在位置周圍的Wi-Fi網(wǎng)絡(luò)的名稱等信息。這些信息使用XML格式進(jìn)行編碼,其主要的結(jié)構(gòu)如圖3所示。
圖3 IE post地理定位請求信息結(jié)構(gòu)
發(fā)出的實際請求如下:
IE 發(fā)出請求后,將從 inference.location.live.net地理定位服務(wù)器得到XML格式的結(jié)果數(shù)據(jù)。數(shù)據(jù)包括經(jīng)緯度信息、高度信息等。結(jié)果數(shù)據(jù)的主要結(jié)構(gòu)如圖4所示。
圖4 IE post地理定位請求結(jié)果信息結(jié)構(gòu)
瀏覽器獲得的實際請求結(jié)果如下:
Firefox等瀏覽器向 maps.googleapis.com 這一地理定位服務(wù)器發(fā)出請求,并從請求的結(jié)果中獲得客戶端的地理位置信息,如圖5所示。
圖5 Firefox等瀏覽器地理定位機(jī)制
與IE一樣,F(xiàn)irefox等瀏覽器使用HTTPS協(xié)議與地理位置服務(wù)器進(jìn)行交互。Firefox等瀏覽器使用get方法來進(jìn)行數(shù)據(jù)的請求。在發(fā)出的請求中,包括了客戶端使用的瀏覽器類型以及所在位置周圍的Wi-Fi網(wǎng)絡(luò)的名稱。
表2 HTTP請求的頭信息
發(fā)出請求后,將從 maps.googleapis.com 地理定位服務(wù)器得到Json格式的定位結(jié)果。
從前面的剖析可以看到,每一種瀏覽器在獲得客戶端的地理定位時,只能向固定的地理定位服務(wù)器發(fā)出請求,而不允許用戶對使用哪一地理定位服務(wù)器進(jìn)行選擇。地理定位服務(wù)器由于本身收集地理數(shù)據(jù)的能力不同,準(zhǔn)確度并不相同。目前瀏覽器地理定位機(jī)制使得用戶失去了選擇更好的地理定位服務(wù)器的可能性。
本文在 JavaScript框架 geo-location-javascript的基礎(chǔ)上,實現(xiàn)了可以允許用戶對地理定位服務(wù)器進(jìn)行選擇的功能,如圖6所示。
圖6 支持用戶選擇的地理定位方式
為了使得瀏覽器能夠?qū)Σ煌牡乩矶ㄎ环?wù)器進(jìn)行訪問,采用了JSONP這一跨域的解決方法。例如,WorldIP是一個共享的地理信息庫,它可以根據(jù)請求者的IP返回請求者的經(jīng)度、緯度、所在國家等信息。本文實現(xiàn) getCurrentPositionFromServer這一函數(shù),可以選擇從哪一地理定位服務(wù)器獲取地理定位數(shù)據(jù):
其中,參數(shù)server用來對地理定位服務(wù)器進(jìn)行設(shè)置。如果使用WorldIP這一地理定位服務(wù)器,則把請求發(fā)送到api.wipmania.com,否則使用瀏覽器自身的地理定位機(jī)制完成信息的發(fā)送。
當(dāng)用“WordIP”作為參數(shù)調(diào)用函數(shù)后,得到如圖7所示的結(jié)果。
圖7 來自地理定位服務(wù)器WordIP的地理數(shù)據(jù)
當(dāng)用“Google”作為參數(shù)調(diào)用函數(shù)后,得到如圖8所示的結(jié)果:
圖8 來自地理定位服務(wù)器Googleapi的地理數(shù)據(jù)
在基于位置的服務(wù)(LBS)類型的應(yīng)用中,地理定位是其中不可缺少的功能。在目前的主流瀏覽器中內(nèi)置了地理定位功能的實現(xiàn)。本文回顧地理定位的基本方法,剖析瀏覽器在實現(xiàn)地理定位功能時的主要實現(xiàn)方式,即使用一定的參數(shù)信息向地理定位服務(wù)器發(fā)出post請求或get請求并獲得數(shù)據(jù)的方式。同時,指出目前瀏覽器地理定位機(jī)制中不能選擇地理定位服務(wù)器的缺陷,并在geo-location-javascript框架的基礎(chǔ)上實現(xiàn)可由用戶自主選擇地理定位服務(wù)器的功能。這一功能使得用戶可以根據(jù)地理定位的準(zhǔn)確度來選擇地理定位服務(wù)器,增強(qiáng)地理定位的實用性。
[1] Wikipedia.地理位置服務(wù)[EB/OL].http://zh.wikipedia.org/wiki/LBS,2012-05-12.
[2] W3C.Geolocation API Specification[EB/OL].http://dev.w3.org/geo/api/spec-source.html,2012-05-10.
[3] Peter Lubbers,Brian Albers,F(xiàn)rank Salim.HTML5高級程序設(shè)計[M].李杰,柳靖,劉淼譯.北京:人民郵電出版社,2012.
[4] [美]Anthony T Holdener III,[阿根廷]Mario Andrés Pagella.深入HTML5應(yīng)用開發(fā)[M].秦緒文,李松峰譯.北京:人民郵電出版社,2012.
[5] Fiddler.Introducing Fiddler[EB/OL].http://www.fiddler2.com/fiddler2,2012-09-20.
[6] 劉華星,楊庚.HTML5—下一代 Web開發(fā)標(biāo)準(zhǔn)研究[J].計算機(jī)技術(shù)與發(fā)展,2011,21(8):54-58,62.
[7] 徐卓揆.基于 HTML5、Ajax和 Web Service的 WebGIS研究[J].測繪科學(xué),2012,37(1):145-147.
[8] 徐莎,楊帆,徐昌慶.基于HTML5的WebGIS的研究與應(yīng)用[J].信息技術(shù),2012(4):149-151.
[9] 易曉飛.HTML5 Geolocation API研究與應(yīng)用[J].計算機(jī)光盤軟件與應(yīng)用,2012(6):153-154.
[10] 陶國榮.jQuery權(quán)威指南[M].北京:機(jī)械工業(yè)出版社,2011.
[11] 陸凌牛.HTML 5與CSS 3權(quán)威指南[M].北京:機(jī)械工業(yè)出版社,2011.
[12] 唐俊開.HTML5移動Web開發(fā)指南[M].北京:電子工業(yè)出版社,2012.
[13] WIPmania.WorldIP-Free Geolocation Database,Service and Tools[EB/OL].http://www.wipmania.com,2012-09-20.
[14] Mozilla.Location-Aware Browsing[EB/OL].http://www.mozilla.org/en-GB/firefox/geolocation/,2012-09-20.
[15] JSON.Introducing JSON[EB/OL].http://www.json.org,2012-09-20.