即使使用 enableHighAccuracy,Javascript GeoLocation 也不准确

Posted

技术标签:

【中文标题】即使使用 enableHighAccuracy,Javascript GeoLocation 也不准确【英文标题】:Javascript GeoLocation is not accurate even when using enableHighAccuracy 【发布时间】:2021-02-18 08:20:41 【问题描述】:

在我的网站中,我希望尽可能准确地获取访问者位置

我使用了 geolocation ,它正在工作并返回纬度和经度。 但问题是有时它们会以非常高的精度返回,有时它们不会 而且距离实际位置很远。

我已包含enableHighAccuracy: true 还需要什么?我该怎么做才能始终以高精度实现它?还是 99% 的时间?

这是输出示例

完全不准确

latitude: ****, longitude: ****, accuracy: 40852

非常准确

latitude: ****, longitude: ****, accuracy: 29

代码

function getCurrentLocation() 
    console.log("test");
    if (navigator.geolocation) 
        navigator.geolocation.getCurrentPosition(function (position)  //showLocation, ErrorHandler, options
            var latitude = position.coords.latitude;
            var longitude = position.coords.longitude;
            var accuracy = position.coords.accuracy;
            var coords = new google.maps.LatLng(latitude, longitude);
            var mapOptions = 
                zoom: 15,
                center: coords,
                mapTypeControl: true,
                navigationControlOptions: 
                    style: google.maps.NavigationControlStyle.SMALL
                ,
                mapTypeId: google.maps.MapTypeId.ROADMAP
            ;

        var capa = document.getElementById('lat');
        capa.innerhtml = "latitude: " + latitude + ", longitude: " + longitude  + ", accuracy: " + accuracy;

        map = new google.maps.Map(document.getElementById("mapContainer"), mapOptions);
        var marker = new google.maps.Marker(
            position: coords,
            map: map,
            title: "ok"
        );

    ,

        function error(msg)  alert('Please enable your GPS position feature.'); 

        ,
         maximumAge: 10000, timeout: 5000, enableHighAccuracy: true );
 else 
    alert("Geolocation API is not supported in your browser.");

【问题讨论】:

我猜你依赖于浏览器返回的内容。您对此无能为力 但许多网站过去常常正确、完美地获取访问者的位置。我的意思是官方和关键网站,例如 gov 这取决于设备。准确度很大程度上取决于是否可以使用 GPS 芯片、手机信号塔数据、WiFi 位置等。在最坏的情况下,将使用 IP 地址,这将使您的准确性非常低。 【参考方案1】:

根据我自己为各种设备制作航海和高尔夫 GPS 应用程序的经验,我认为准确度估计非常保守。

自从我为手机制作应用程序(也使用 navigator.geolocation)三星手表(也使用 geolocation.navigator)Apple Watch 和 Fibit 以来,我做了很多测试。在高尔夫球场上,我有旗帜的坐标,在高尔夫球场上有正确的距离标记。此外,其他高尔夫球手使用激光来获得与旗帜的距离。虽然应用程序向您显示 15 米的精度,但实际上不超过 5,通常小于 5。

您可以做的测试是加载谷歌卫星地图,然后在上面显示您当前的位置。

现在 enableHighAccuracy 不保证基于卫星的位置,但也可以基于手机信号塔/wifi 网络以及取决于设备。当发现更多卫星时,精度会慢慢提高。没有建筑物的清晰天空是最好的。即使半小时后,准确性仍然提高。地平线较低的卫星很难找到,但提高了准确性

【讨论】:

以上是关于即使使用 enableHighAccuracy,Javascript GeoLocation 也不准确的主要内容,如果未能解决你的问题,请参考以下文章

科尔多瓦地理定位错误的坐标

如何让 HTML5 Geolocation 更准确?

高精度地理定位Html5

即使在我重新加载页面后,如何防止已经在 J​​avascript 中启动的“onclick”功能?

地理定位不适用于 Firefox

算法 - 排序