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