最好accurancy
注可達到:
- 下
maximumAge
設置。
timeout
取決於你的應用程序是如何使用的(這是一個「navi-應用程序」主要用於汽車或是「慢跑者應用程序」主要用於徒步?)。基本規則:設置較高的timeout
的時間越長,您授予硬件GPS芯片以請求準確的座標。
- 當然,
enableHighAccuracy
也必須設置爲true
。
讓我來解釋上述(一點點),更詳細點。
當您將maximumAge
設置爲0
(零)時,您永遠不會收到「live」-gps-座標(未緩存),因爲即使是最精確的座標也有一定的年齡。這真的取決於你的應用程序要求,這使我到timeout
。
我會將超時設置爲5秒,因爲我使用的大多數現代設備都可以獲得0.5-3秒之間的座標。它取決於你的應用移動的速度有多快(汽車,徒步)。應用程序移動得越快,就必須設置越少的timeout
,否則應用程序可能會得到太不準確的座標。另一方面,timeout
不得設置爲0
,因爲每次都會立即取消請求,並且您永遠不會收到「實時」-gps-座標。
您也可以使自己的插件或在github例如有更好地控制fork一個項目:
- 水平/垂直精度
- ,以確保GPS的硬件芯片總是被使用(始終初始化Android的
LocationManager.GPS_PROVIDER
)。因爲即使您將enableHighAccuracy
設置爲true
,也無法保證gps-hardware-chip真的被使用,您只能告訴該插件使用(如果可能)gps衛星,並且強烈依賴於環境條件帶我到下一段。
- ....
需要注意的是:這並不總是可能的請求,因爲惡劣的環境條件下最準確的coordiantes(街道峽谷,強混濁等)。是否要求您的應用必須隨時隨地獲取座標?那麼你必須放鬆你的準確性要求。
最後但並非最不重要的一點,在成功的請求後,您可以始終檢查座標的準確性屬性,該準確性屬性不得超過某個閾值(取決於應用程序要求),如果它確實發出另一個請求這個例子:
var threshold = "APP-ACCURANCY-REQUIREMENT-NUMBER-HERE";
function requestLocation(callback) {
navigator.geolocation.getCurrentPosition(
function (position) {
console.log(position);
// Does this position fulfill the ACCURANCY-REQUIREMENT of your app? IF SO THEN STOP REQUESTING OTHERWISE REQUEST AGAIN
if (position.coords.accuracy < threshold) callback(position);
else requestLocation(callback);
},
function (err) {
console.log(err);
},
{
maximumAge: 60000,// IS A 1-MINUTE-COORDINATE TOO OLD WHILE DRIVING BY CAR? 130KM/hour -> 36 M/sec
timeout: 8000 ,// IS A WAITING-TIME OF 8 SECONDS TOO LONG WHILE DRIVING BY CAR?
enableHighAccuracy: true // YES, THIS ATTRIBUTE MUST BE SET TO TRUE
}
);
}
requestLocation(function (position) {
// position that has got an accuracy less than ACCURANCY-REQUIREMENT
console.log('request accurate position', position);
});
希望這個「故事」幫助你,祝你好運!
謝謝,非常有趣。我嘗試停用Wi-Fi和GPS,所以我認爲它會使用移動數據(4G +),但即使在100秒內也會失敗。你知道這件事嗎? – Destal
不客氣。聽起來就像那時手機沒有「位置源」。據我所知,GPS-Symbol(標題中的設置欄中的符號)代表整個系統本地化,因此當它停用時,沒有應用程序能夠請求它們的位置。 – Blauharley
與我的測試Android手機(棒棒糖)沒有選項來停用wifi和保持移動數據本地化方面激活,所以我想它與你的手機一樣。無論哪種方式,手機只能通過使用信號度量來定位到達時間(信號傳播時間,gps)或接收信號強度(wifi或移動數據),但沒有第三種選擇。希望這可以幫助。 – Blauharley