我试图在地图上显示用户的当前位置。使用HTML5地理位置,它会要求用户提供权限,我觉得这很烦人,我发现我可以通过直接使用google maps api来绕过它。
问题在于,无论哪种解决方案,准确度都可以很好(300km关闭)。
https://developers.google.com/maps/documentation/javascript/geolocation
这是Google提供的示例,而且状况良好。此外,从浏览器到浏览器的准确度也会发生变化。
这是我已达成的代码。
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米),因为同时在同一个浏览器上我看到自己完全脱离谷歌的例子,我看到自己在我在普通谷歌地图页面中的位置。
答案 0 :(得分:0)
因此,如果您不想以大量请求为代价来捕获和计算最可能的位置,或者您不想创建自己的脚本来连接到此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....
}
明智的选择……这将明显增加您的要求。您已被警告.....除非Google在阅读本文时允许无限制的免费请求。