国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

HTML5 Geolocation API工作原理

Original 2016-11-12 14:05:13 528
abstract:大家都知道,HTML5 Geolocation 可以使用 IP 地址、基于 Web 的數(shù)據(jù)庫、無線網(wǎng)絡連接和三角測量或 GPS 技術(shù)來確定經(jīng)度和緯度。問題:在一個基于地理位置服務的個人業(yè)余項目(小伙伴在哪兒)中,發(fā)現(xiàn)用PC獲取的地理位置與手機端獲取的地理信息存在微小的差距,PC端會經(jīng)常出現(xiàn)獲取不到地理位置的情況,PC端和手機端的Geolocation是否有什么底層實現(xiàn)方面的差別呢,HTML5又是根

大家都知道,HTML5 Geolocation 可以使用 IP 地址、基于 Web 的數(shù)據(jù)庫、無線網(wǎng)絡連接和三角測量或 GPS 技術(shù)來確定經(jīng)度和緯度。

問題:

在一個基于地理位置服務的個人業(yè)余項目(小伙伴在哪兒)中,發(fā)現(xiàn)用PC獲取的地理位置與手機端獲取的地理信息存在微小的差距,PC端會經(jīng)常出現(xiàn)獲取不到地理位置的情況,PC端和手機端的Geolocation是否有什么底層實現(xiàn)方面的差別呢,HTML5又是根據(jù)什么原則來確定應該采用何種方式來確定經(jīng)度和緯度信息呢?

帶著這個問題,作者查閱了一些資料,得出以下幾個假設和結(jié)論:

一、HTML5 Geolocation API是如何工作的

根據(jù)您所使用的瀏覽器,HTML5地理位置API實現(xiàn)原理依賴于于多項因素,包括你的公網(wǎng)IP地址,手機信號塔的ID,GPS信息,一系列無線接入點,信號強度和MAC地址(Wifi/藍牙)。然后它將該信息通過https協(xié)議傳遞到一個位置服務商并嘗試將該信息與大量的相關(guān)數(shù)據(jù)庫進行匹配查找。然后返回一個近似的位置信息,通過javascript的回調(diào)函數(shù)傳遞到代碼。

舉一個例子來驗證一下HTML5 Geolocation到底給位置服務商發(fā)送了哪些信息,我用firefox11做了一些測試,firefox使用了google的位置服務。順便提一下,到目前為止,firefox11不會再傳送cookie到服務器。

firefox11發(fā)送了一個https請求:https://maps.googleapis.com/maps/api/browserlocation/json?

GET /maps/api/browserlocation/json?browser=firefox&sensor=true&wifi=mac:01-24-7c-bc-51-46%7Cssid:3x2x%7Css:-37&wifi=mac:09-86-3b-31-97-b2%7Cssid:belkin.7b2%7Css:-47&wifi=mac:28-cf-da-ba-be-13%7Cssid:HERESIARCH%20NETWORK%7Css:-49&wifi=mac:2b-cf-da-ba-be-10%7Cssid: ARCH%20GUESTS%7Css:-52&wifi=mac:08-56-3b-2b-e1-a8%7Cssid:belkin.1a8%7Css:-59&wifi=mac:02-1e-64-fd-df-67%7Cssid:Brown%20Cow%7Css:-59&wifi=mac:2a-cf-df-ba-be-10%7Cssid: ARCH%20GUESTS%7Css:-59 HTTP/1.1


二、瀏覽器使用哪個位置服務?

并不是所有g(shù)eolocation 服務都是一樣的,而且并不一定會使用同一個算法甚至不是一個數(shù)據(jù)庫。正因為如此,通過瀏覽器獲取到的位置信息可能會因為采用的位置服務不同而不同。

下面列舉了一些瀏覽器使用的位置服務。雖然我沒有做測試,根據(jù)我的經(jīng)驗,不同的瀏覽器、不同的設備包括智能手機、pad,即使是在同一地點都會返回不同的位置信息。有些位置服務在有一些城市會更精確,另一些位置服務在其他城市會更精確。

  • chrome使用google location services

  • window平臺上firefox使用google location services

  • linux上的firefox使用GPSD - http://catb.org/gpsd/.

  • IE9+使用Microsoft location service

  • IOS上的safari瀏覽器使用Apple location services for iphone os3.2+

  • 我不確定window平臺上的safari使用哪個位置服務。

  • opera使用google location services。Android平臺上的opera使用GPS。

HTML5 geolocation需要聯(lián)網(wǎng)。如果檢測到設備沒聯(lián)網(wǎng),有些時候瀏覽器會從緩存中獲取位置信息,但是這個緩存的位置信息是最后一次聯(lián)網(wǎng)時獲取到的位置信息。

WIFI是否開啟。如果在你的手機、桌面設備、平板上WIFI沒有開啟,Geolocation API會嘗試用你的公網(wǎng)IP或者電話塔ID或GPS來查找你的位置信息。公網(wǎng)IP數(shù)據(jù)庫通常會返回一個你的網(wǎng)絡提供商的存在點或POP。另外,一些網(wǎng)絡供應商會提供rotating ip address.所以,可以嘗試在一段時間內(nèi)使用一個ip地址,你會得到不同的結(jié)果。所以公網(wǎng)IP只適合來定位你位于哪個城市,或者該城市哪個區(qū)域,或者國家。

對于電話塔IDS,它依賴于你使用哪種手機以及供應商。有一些智能手機只會返回當前手機正在ping的電話塔位置,所以這有可能會不太精確的。

我注意到了Android內(nèi)置的瀏覽器在沒有wifi的情況下會比較不精確。精確程度只有1000+。如果我打開wifi之后(我在鄉(xiāng)下區(qū)域),精確度立馬增高到75m左右。

農(nóng)村/城市。大部分用戶都在城市,但是如果你的用戶到鄉(xiāng)下的地方去旅游,Geolocation就變得不太可靠了。即使用戶打開了wifi,但是如果用戶沒有處于wifi接入點附近,geolocation service依然會嘗試用其他方法去定位。鄉(xiāng)下地方很難用三角定位的方法來獲取位置信息,如果瀏覽器不實用GPS,精確度也會收到很大影響。

移動/靜止。geolocation api在靜止的城市區(qū)域會提供一個更精確的位置。當我在城鎮(zhèn)周邊駕駛的時候,我的android原生瀏覽器中很難獲取到精確的位置信息。但是如果你停止在一個點的時候偶爾會返回一個結(jié)果。當我在告訴公路上以每小時50公里的速度駕駛的時候,我很難得到一個結(jié)果。

是否開啟了VPN。如果VPN打開了,geolocation會根據(jù)VPN的公網(wǎng)ip去尋址。

自定義的Geolocation作為備用。根據(jù)自身的實際情況,可能你會想要使用一些商業(yè)服務來獲取位置信息,例如IP2Location?;蛘呤褂玫谌降膅eolocation service,比如Skyhook。記住IP Geolocation只會返回城市或區(qū)域級別精度的位置信息。

如果HTML5滿足不了我的需求,怎么辦?如果你有較高的精度需求,我推薦使用native app。


Release Notes

Popular Entries