2013-12-06 2 views
9

Я нашел много вопросов о координатах GPS, но не тот, который подтверждает использование мобильного оборудования GPS вместо Web GPS, такого как geoLocation и т. П.Получить координаты из оборудования GPS

Мой фактический метод:

Я использую navigator.geolocation.getCurrentPosition(), то Lat/Long приходит из Интернета, вот код:

function getGPS(funcCallBack) 
{ 
    if (navigator.geolocation) 
    { 
    var timeoutVal = getCookie("GPSTimeout"); 
    navigator.geolocation.getCurrentPosition(sucess 
              ,error 
              ,{enableHighAccuracy: true 
               ,timeout: timeoutVal 
               ,maximumAge: 0} 
              ); 
    } 
    else{ 
    alert('GPS is turned off, or was not possible to find it. Now, doing the login without localization.'); 
    window.gpsLat = 0; 
    window.gpsLng = 0; 
    window.gpsAcc = 0; 
    funcCallBack(); 
    } 
    function sucess(position) //sucess 
    { 
     window.gpsLat = position.coords.latitude; 
     window.gpsLng = position.coords.longitude; 
     window.gpsAcc = position.coords.accuracy; 
     funcCallBack(); 
    } 
    function error()   //error 
    { 
     window.gpsLat = 0; 
     window.gpsLng = 0; 
     window.gpsAcc = 0; 
     funcCallBack(); 
    } 
} 

Моя проблема:

Иногда, когда я сделать логин Я не получаю координаты GPS (они приходят 0), и иногда я получаю координаты с более чем 2 000 Точность (это n от точного).

Кстати, я тестирую GPS на интернет-сервисе данных, когда я использую Wi-Fi-соединение, он отлично работает с точностью менее 100 Точность.

Детали:

Может быть, вы жалуетесь:

  1. timeoutVal: это печенье с номером 5000 внутри него.
  2. funcCallBack: это функция, которая продолжает операцию входа в систему.
  3. window.gpsLat: это глобальный var, содержащий значение Latitude, полученное от geoLocation.
  4. window.gpsLng: это глобальный var, содержащий значение Longitude, полученное от geoLocation.
  5. window.gpsAcc: это глобальный var, содержащий значение Accuracy, полученное от geoLocation.

Что мне нужно?

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

+0

иногда первые показания пары являются пятнистыми, в то время как GPS «прогревается» до спутниковой антенны над вашим конкретным местоположением. вы также можете проверить частоту возвратов на watchPosition(), чтобы обнаружить gps/wifi: wifi не обновляется очень часто, но gps немного шумит. – dandavis

+1

Как eddiec предложил в последних строках своего ответа, если вы создаете мобильное приложение, вы должны _definitely_ использовать фреймворк, такой как PhoneGap, который предлагает в большинстве случаев полный или полу-полный доступ к встроенной реализации GPS. Использование встроенных браузеров - слабая идея. BTW: Не путайте. API-интерфейс PhoneGap имеет те же имена функций для объекта Geolocation, как Geolocation в браузерах (HTML5), но обеспечивает более адекватную встроенную поддержку GPS. – trejder

ответ

11

Вы должны получить местоположение с помощью javascript, а не PHP. PHP способен выполнять IP-поиск, который является наименее точным методом определения местоположения.

Путь navigator.geolocation.getCurrentPosition() работает, он использует самые точные данные, доступные в настоящее время. В случае мобильного устройства он сначала будет использовать GPS, если он включен, затем wi-fi.

Если встроенный GPS включен, javascript будет получать доступ к этим данным вместо данных wi-fi, но нет возможности предотвратить проверку данных wi-fi, если данные GPS недоступны.

Ваше лучшее решение - проверить поле точности, и если вы не в пределах диапазона, которым вы довольны, попросите пользователя включить GPS.

В качестве альтернативы, если вы создаете гибридное приложение, большинство фреймворков (PhoneGap .etc.) Имеют API для непосредственного запроса на устройство GPS.Use PhoneGap to Check if GPS is enabled

+0

вы уверены, что 'navigator.geolocation.getCurrentPosition()' использует самые точные данные, доступные в настоящее время? И знаете ли вы также среднюю «точность» родного gps? –

+0

И я тоже столкнулся с некоторыми проблемами с браузерами, например, когда я использую браузер Firefox, я могу получить GPS-координаты из интернет-сервиса данных, а при использовании оперы или любого другого браузера я могу получить только 0 координат, знаете ли вы, что это такое? –

+0

Это дает самый точный (так что родной GPS если есть), но я не могу сказать вам, что в среднем я уверен, что это зависит от устройства и условий. На самом деле вам все равно, откуда поступают данные, пока он находится в пределах порога точности. – eddiec

4

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

E.g. POSITION_UNAVAILABLE (2) если сеть выключена или спутники позиционирования не могут быть связаны. Но его не уверенный короткий путь вы должны справиться с некоторыми условиями!

Я предлагаю использовать watchPostion {я согласен, что он предназначен для наблюдения и непрерывного поиска позиции} u может сохранить его, и если GPS выбросит ошибку, вы можете запросить пользовательское оповещение, чтобы пользователь включил устройство GPS/wifi/internet .. и если его придет к успеху обратный вызов, вы можете очистить часы.

var watch =null; 
function success(position) 
{ 
    var lat = position.coords.latitude; 
    var lon= position.coords.longitude; 
    if (watch != null) 
/*Need to take care .. as maybe there is no gps and user 
    want it off so keep attempt 3 times or some kind a way out otherwise it will 
    infinite loop */ 
    { 
     navigator.geolocation.clearWatch(watch); 
     watch = null; 
    } 

} 
function getLatLon() 
{ 
    var geolocOK = ("geolocation" in navigator); 
    if (geolocOK) 
    { 
     var option = {enableHighAccuracy:true, maximumAge: 0,timeout:10000 }; 
     watch = navigator.geolocation.watchPosition(success, fails, option); 
    } 
    else { 
     //disable the current location? 
    } 
} 
function fails() 
{ 
    alert("please turn on the GPS !"); 
} 
getLatLon(); 
+0

+1 для ответа, его хороший ответ, но я не хочу смотреть позицию, я только хочу получить ее один раз, чтобы отправить ее на мой сервер и сохранить в базе данных, чтобы узнать, где был пользователь, когда он регистрировался Кроме того, насколько я использую интернет-сервис данных (это плохой медленный сервис здесь), мне нужно использовать меньше Интернета, чтобы это сделать. –

+0

Я могу думать только о решении :-), которые делают выше js при первом попадании и сохраняют lat/lon на стороне сервера или файла cookie, чем отключить/включить donot в следующие хиты этой привязки js. – Neha

Смежные вопросы