如何使用google maps api获得精确的位置?

时间:2017-06-11 00:41:11

标签: javascript google-maps

我试图在地图上显示用户的当前位置。使用HTML5地理位置,它会要求用户提供权限,我觉得这很烦人,我发现我可以通过直接使用google maps api来绕过它。

问题在于,无论哪种解决方案,准确度都可以很好(300km关闭)。

HTML5解决方案

https://developers.google.com/maps/documentation/javascript/geolocation

这是Google提供的示例,而且状况良好。此外,从浏览器到浏览器的准确度也会发生变化。

谷歌地图api解决方案

这是我已达成的代码。

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米),因为同时在同一个浏览器上我看到自己完全脱离谷歌的例子,我看到自己在我在普通谷歌地图页面中的位置。

1 个答案:

答案 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在阅读本文时允许无限制的免费请求。