地理位置 HTML5 enableHighAccuracy True 、 False 还是最佳选项?

2022-01-14 00:00:00 geolocation html

我对 HTML5 地理定位功能有疑问.我使用下面的代码来获取位置数据.我使用enableHighAccuracy: false"选项来处理基于蜂窝的 GPS 功能.准确率低,但反应太快.但是有些人总是在手机上使用内置 GPS,所以这个代码对他们不起作用.但是,如果我将准确性选项更改为enableHighAccuracy:true",它适用于他们.但这一次,代码只使用了内置 GPS.不是基于 CELL 的 GPS.

i have a problem about HTML5 geolocation feature. I use the code below to get location data. I use "enableHighAccuracy: false" option to work with Cell Based GPS feature. Accurancy is low but response it too fast. But some people always use Built-in GPS with their mobile phone, so this code does not work for them. Bu if i change accurency option as "enableHighAccuracy: true" it works for them. But this time, the code uses only built-in GPS. not CELL based GPS.

问题 -> 我该怎么做:首先,如果此时无法获得位置,请尝试从内置 GPS 超时(例如 5000 毫秒)获取位置,只需查找基于单元的位置超时(例如 10000 毫秒)如果此时无法获取位置,则返回错误消息.

The question -> How can i do that : First, try to get position from Built-in GPS with timeout (e.g. 5000ms ) if position cannot be got in this time just look for Cell Based position for timeout (e.g. 10000ms) if position cannot be get in this time, return an error message .

这是我现在使用的代码.

Here is the code that i use now.

提前致谢.

    function getLocationfromGoogle() {
    navigator.geolocation.getCurrentPosition(
      function(pos) {
        $("#lat_field").val(pos.coords.latitude);
        $("#long_field").val(pos.coords.longitude);
        var geocoder = new google.maps.Geocoder();
        var latLng = new google.maps.LatLng(pos.coords.latitude,pos.coords.longitude);
              geocoder.geocode({ 'latLng': latLng}, function (results, status) {
              if (status == google.maps.GeocoderStatus.OK) {
                //console.log(results[0].formatted_address);
                $("#adresim").val(results[0].formatted_address);
                }
                else {
            alert('Google convertion is not succesfully done.');  

            }
            });
      },function error(msg){

                alert('Please enable your GPS position future.');  

      },{maximumAge:600000, timeout:5000, enableHighAccuracy: false}

    ); 
    }

推荐答案

您还应该知道,这个实现因手机操作系统而异 - 适用于 Android 的功能可能适用于 iOS、黑莓、WindowsPhone等.

You should also be aware that the implementation of this varies from phone OS to phone OS - what works on Android may or may not work on iOS, BlackBerry, WindowsPhone, etc.

你就快到了,你只需要:

You're almost there, you just need to:

  1. 指定 enableHighAccuracy: true(您已将其设置为 false)
  2. 在错误处理程序中处理超时错误情况.如果高精度查询的错误超时,请使用 enableHighAccuracy: false 重试.
  1. Specify enableHighAccuracy: true (you have it set to false)
  2. Handle the timeout error case in the error handler. If the error from the high accuracy query is timeout, then try it again with enableHighAccuracy: false.

看看这个示例代码.

您还应该注意,在一些设备上进行测试时,即使在 enableHighAccuracy: true 时,它也会返回从 WiFi 派生的位置.

You should also note that when testing this on a few devices, it returns location derived from WiFi even when enableHighAccuracy: true.

相关文章