Geolocation HTML5 enableHighAccuracy True, False или лучший вариант?

У меня проблема с функцией привязки HTML5. Я использую код ниже, чтобы получить данные о местоположении. Я использую опцию enableHighAccuracy: false для работы с функцией GPS на основе сотовой связи. Точность низкая, но реакция слишком быстро. Но некоторые люди всегда используют встроенный GPS со своим мобильным телефоном, поэтому этот код для них не работает. Bu, если я изменяю параметр точности как "enableHighAccuracy: true", он работает для них. Но на этот раз в коде используется только встроенный GPS. а не GPS на базе CELL.

Вопрос → Как я могу это сделать: во-первых, попытайтесь получить позицию из встроенного GPS с тайм-аутом (например, 5000 мс), если позиция не может быть получена в это время, просто посмотрите на позицию Cell Based для тайм-аута (например, 10000 мс) если позиция не может быть получена в это время, верните сообщение об ошибке.

Вот код, который я использую сейчас.

Спасибо заранее.

    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}

    ); 
    }

Ответ 1

Вы также должны знать, что реализация этого зависит от операционной системы телефона и операционной системы телефона - то, что работает на Android, может работать или не работать на iOS, BlackBerry, WindowsPhone и т.д.

Ты почти у цели, тебе просто нужно:

  1. Укажите enableHighAccuracy: true (у вас установлено false)
  2. Обработайте случай ошибки тайм-аута в обработчике ошибок. Если ошибка в запросе высокой точности является тайм-аутом, попробуйте еще раз с enableHighAccuracy: false.

Посмотрите на этот пример кода.

Следует также отметить, что при тестировании этого на нескольких устройствах, он возвращает местоположение, полученное из WiFi, даже когда enableHighAccuracy: true.

Ответ 2

Код, упомянутый здесь: http://jsfiddle.net/CvSW4/ не работал у меня во время обработки ошибок.

Причина в том, что функции ошибки принимают параметр с именем "позиция", но используют объект в функциях с именем "ошибка".

function errorCallback_highAccuracy(position) { ... }
function errorCallback_lowAccuracy(position) { ... }

Решение, чтобы исправить это, заключалось в том, чтобы переключить методы ошибок, чтобы принять входное значение как параметр с именем "ошибка", а не "позиция", поскольку обратные вызовы ошибок не принимают позицию и вместо этого вызывают объект ошибки.

function errorCallback_highAccuracy(error) { ... }
function errorCallback_lowAccuracy(error) { ... }

Я упоминаю это здесь, потому что я не мог опубликовать на странице результатов, а также это место, где я связался, чтобы найти образец кода, упомянутый выше.