2012-11-28 22 views
6

OK, mój kod jest poniżej, więc wyjaśnię, co robię i co dostaję dla wyników.navigator.geolocation.watchPosition po prostu nie działa

Próbuję pobrać lokalizację użytkowników za pomocą opcji navigator.geolocation.watchPosition. Podałem zarówno powodzenie, jak i błąd zwrotny. Po raz pierwszy otrzymuję lokalizację, która zazwyczaj jest bardzo niedokładna, więc używam watchPosition, aby uzyskać lokalizację, dopóki nie zostanie wypróbowana 4 razy lub uzyska dokładną lokalizację w promieniu 500 metrów.

Problemy mam:

  • nigdy nie wchodzi do wywołania zwrotnego błędu dla Androida (testowane na HTC Sensation i Samsung Galaxy S3). Jednak na iPhonie wydaje się, że wprowadził błąd zwrotny ponad 50% czasu.

  • To również nigdy timeout. Po prostu wyszukuje, dopóki nie otrzyma lokalizacji .

  • Uzyskanie lokalizacji zajmuje od 0 do 60 sekund. Czasami ma go przed załadowaniem strony, innym razem zajmuje to większą część minuty. Nie ma również żadnego dostrzegalnego wzoru, dlaczego czasami robi się to szybko, i dlaczego nie innym razem.

Przeszukałem wiele postów na forum i wiele pytań dotyczących stackoverflow, a także specyfikację geolokalizacji i innych dokumentów. Nie ma zbyt wielu informacji na ten temat, nie wspominając już o tych problemach. Czy jest coś, co robię źle? Czy jest to po prostu charakter pracy z lokalizacją?

if(navigator.geolocation){ 
     var geo_count = 0; 

     var wpid = navigator.geolocation.watchPosition(success, error, { 
      enableHighAccuracy: true, 
      maximumAge: 0, 
      timeout: 10000 
     }); 

     function success(position){ 
      alert(position.coords.accuracy) 

      geo_count = geo_count + 1; 

      if(position.coords.latitude && position.coords.longitude && position.coords.accuracy < 500){ 
       navigator.geolocation.clearWatch(wpid); 

       alert('position obtained!');  
      } 
      else if(geo_count > 4){ 
       navigator.geolocation.clearWatch(wpid); 

       alert('inaccurate position obtained'); 
      } 
     } 

     function error(error){ 
      switch(error.code){ 
       case 1: 
        alert('permission denied'); 
        break; 
       case 2: 
        alert('position unavailable'); 
        break; 
       case 3: 
        alert('timeout'); 
        break; 
       default: 
        alert('unknown error'); 
        break; 
      } 
     } 
    } 

Odpowiedz

2

polecam sprawdzić za pomocą:

if (typeof navigator.geolocation === 'object' && typeof navigator.geolocation.watchPosition === 'function') { 
    ... 
} 

„The Geolocation.watchPosition() metoda służy do zarejestrowania funkcji obsługi, które za każdym razem pozycja urządzenia zmienia będzie wywoływana automatycznie Możesz również opcjonalnie określić funkcję zwrotną obsługującą błąd. "

Maby nie uruchamia, ponieważ pozycja jest wciąż taka sama? ^^

próba debugowania go za pomocą Geolocation.getCurrentPosition() z przerwą lub WebWorker: https://developer.mozilla.org/en-US/docs/Web/API/Geolocation

Powodzenia

Powiązane problemy