Javascript 如何使用谷歌地图api获取精确位置?

Javascript 如何使用谷歌地图api获取精确位置?,javascript,google-maps,Javascript,Google Maps,我试图在地图上显示用户的当前位置。使用HTML5地理定位,它会请求用户许可,我觉得这很烦人,我发现我可以直接使用谷歌地图api绕过这一点 问题是,无论采用哪种解决方案,精度都可能很高(300公里) HTML5解决方案 这是谷歌提供的一个例子,它很富裕。不同浏览器的精度也会有所不同 谷歌地图api解决方案 这是我找到的密码 function calculateZoomLevel(accuracy) { var equatorLength = 40075004; // in meters

我试图在地图上显示用户的当前位置。使用HTML5地理定位,它会请求用户许可,我觉得这很烦人,我发现我可以直接使用谷歌地图api绕过这一点

问题是,无论采用哪种解决方案,精度都可能很高(300公里)

HTML5解决方案

这是谷歌提供的一个例子,它很富裕。不同浏览器的精度也会有所不同

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

因此,如果您不想以大量请求为代价捕获和计算最可能的位置,或者您不想创建自己的脚本来连接此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....
}
coords=new google.maps.LatLng(e.location.lat,e.location.lng);
准确度=e.准确度;
var c=0;

如果(浏览器地理位置的准确性由许多因素决定。允许站点使用该信息也取决于用户的判断。非浏览器方法可能使用用户IP地址,您已经发现这是(谢天谢地)不太准确浏览器没有任何确定位置的方法,这取决于主机系统。可以通过各种方式提供位置,如GPS、移动电话塔三边测量或IP检测。如果您绕过用户的许可,则可能会退回到IP检测,对我来说,IP检测最远可达1000公里gle示例要求权限,并且与使用google api的示例具有相同的准确性。非常确定这是因为浏览器解决方案也基于google api。无论哪种方式,google地图官方页面都不要求权限,而且非常准确。