[英]How can I get precise location with google maps api?
我正試圖在地圖上顯示用戶的當前位置。 使用HTML5地理位置,它要求用戶許可,我覺得很煩,我發現我可以通過直接使用谷歌地圖api繞過這個。
問題在於,使用任何一種解決方案,准確度都可以很好(300km關閉)。
https://developers.google.com/maps/documentation/javascript/geolocation
這是谷歌提供的例子,它很好。 從瀏覽器到瀏覽器的准確度也會發生變化
這是我達到的代碼。
function calculateZoomLevel(accuracy) {
var equatorLength = 40075004; // in meters
var mapWidth = 480; // in pixels
var metersPerPixel = equatorLength / 4096;
var zoomLevel = 1;
while ((metersPerPixel * mapWidth) > accuracy) {
metersPerPixel /= 2;
zoomLevel++;
}
return Math.min(zoomLevel, 17);
}
function initMap() {
var coords = new google.maps.LatLng(37.990832, 23.70332), accuracy = 0;
$.post('https://www.googleapis.com/geolocation/v1/geolocate?key=MY_API_KEY').done(function(e) {
coords = new google.maps.LatLng(e.location.lat, e.location.lng);
accuracy = e.accuracy;
map = new google.maps.Map(document.getElementById('map'), {
zoom: calculateZoomLevel(accuracy),
center: coords,
mapTypeId: google.maps.MapTypeId.ROADMAP,
});
new google.maps.Circle({
center: coords,
radius: accuracy,
map: map,
fillColor: '#ff0000',
fillOpacity: .5,
strokeColor: '#ff0000',
strokeOpacity: .5
});
}).fail(function(e) {
console.log('fail ajax post geolocation', e);
});
}
問題是,我知道精度可以很好(10-30米),因為同時在同一個瀏覽器上我看到自己完全脫離谷歌的例子,我看到自己在普通谷歌地圖的我的位置頁。
因此,如果您不想以大量請求為代價捕獲和計算大多數可能的位置,或者您不希望自己的腳本連接到此api,這將是一個挑戰...創建一個循環閾值。 如果不合理的准確性,請回想一下您的功能。 含義:
coords = new google.maps.LatLng(e.location.lat, e.location.lng);
accuracy = e.accuracy;
var c = 0;
if (c<20){
If (accuracy <100){
.. do your stuff..
}else{
initMap();
c++;
}
}else{
...failed....
}
所以說明智......這會以明顯的方式增加你的要求。 你已被警告.....除非谷歌允許無限量的免費請求,當你讀這篇文章。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.