2012-01-29 8 views
11

Mam problem z funkcją geolokacji HTML5. Używam poniższego kodu, aby pobrać dane o lokalizacji. Używam opcji "enableHighAccuracy: false" do pracy z funkcją GPS opartą na komórce. Dokładność jest niska, ale reakcja jest zbyt szybka. Ale niektórzy ludzie zawsze używają wbudowanego GPS z ich telefonu komórkowego, więc ten kod nie działa dla nich. Bu, jeśli zmienię opcję accurency jako "enableHighAccuracy: true" to działa dla nich. Ale tym razem kod wykorzystuje tylko wbudowany GPS. GPS nie jest oparty na CELL.Geolokacja HTML5 enableHighAccuracy Prawdziwa, fałszywa lub najlepsza opcja?

Pytanie -> Jak to zrobić: Najpierw spróbuj uzyskać pozycję z wbudowanego GPS z limitem czasu (np. 5000ms), jeśli pozycja nie może zostać uzyskana w tym czasie, po prostu znajdź pozycję opartą na komórce dla limitu czasu (np. 10000ms) jeśli nie można uzyskać pozycji w tym czasie, zwróć komunikat o błędzie.

Oto kod, którego teraz używam.

Z góry dziękuję.

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} 

    ); 
    } 

Odpowiedz

21

Należy również zdawać sobie sprawę, że realizacja ta waha się od telefonu do telefonu OS OS - co działa na Androidzie mogą lub nie mogą pracować na iOS, BlackBerry, WindowsPhone itp

Jesteś prawie tam, wystarczy:

  1. Określ enableHighAccuracy: true (masz to ustawione false)
  2. Uchwyt przypadek błędu limitu czasu w programie obsługi błędów. Jeśli błąd z zapytania o wysokiej dokładności upłynął, należy spróbować ponownie pod numerem enableHighAccuracy: false.

Wystarczy popatrzeć na ten przykładowy kod: http://jsfiddle.net/CvSW4/

Należy również pamiętać, że podczas testowania to na kilku urządzeniach, zwraca lokalizację pochodzący z bezprzewodowym dostępem do Internetu, nawet jeśli enableHighAccuracy: true.

+0

Witam Kevin.Thanks za odpowiedź. Tak, przetestowałem to z moim Androidem 2.3 to działa. Również w Firefox i Chrome. to działa. –

+0

Testowałem dla Androida 4.1 na FF i Chrome i nie działałem wcale w żadnym z nich – Andrade

+2

http://jsfiddle.net/CvSW4/761/ zastąpiony obiekt położenia z obiektem błędu w obsłudze błędów – Devz

6

Kod wspomniany tutaj: http://jsfiddle.net/CvSW4/ nie działał dla mnie podczas obsługi błędów.

Powód jest taki, że funkcje błędu akceptują parametr o nazwie "position", ale używają obiektu w funkcjach zwanych "error".

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

Rozwiązanie to naprawić to, aby przełączać metody błędach, aby zaakceptować wartość wyświetlaną jako parametr o nazwie „błąd”, a nie „pozycja”, ponieważ callbacks błędach nie przyjmują pozycję i rzucać obiektu błędzie zamiast.

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

wspominam go tutaj, ponieważ nie mogę pisać na wynikającym przykład strony, a także jest to miejsce, gdzie połączone poprzez znalezienie próbki kodu wymienionych powyżej.

Powiązane problemy