Er is een bug want watchposition werkt niet zoals staat beschreven.
Hij laad de functie elke keer weer, zonder dat het apparaat veranderd van locatie. Zelfs via mijn laptop.


 window.setInterval(function() {
        showlocation();
      }
  , 2000);  // 2000==2 seconds
      function showlocation() {
        navigator.geolocation.watchPosition(callback);
      }
      function callback(position) {
        var lat = position.coords.latitude;
        var lng = position.coords.longitude;
        $.post('<?=HTML_ROOT?>inc/addcurrentloc.php', 'lat=' + lat + '&lng=' + lng, function(response) {
          console.log(response);
        }
              );;
      }


om de 2 seconde word de callback geladen. Hij hoort zo te werken dat hij hem alleen laad als de positie wijzigd.
Weet iemand waarom?
De letter T lijkt wat te haperen?? (een keer of 5)

Met welke browser probeer je dit uit?

Letter T waar?
Ik gebruik chrome.

Ik lees een vergelijkbaar probleem hier: http://stackoverflow.com/questions/6183463/when-using-setinterval-if-i-switch-tabs-in-chrome-and-go-back-the-slider-goes

Ik heb alle oplossingen daar geprobeert, maar er veranderd niks.
Als ik van tab verwissel en weer terug ga dan laad hij het meerdere keren hoe langer ik dus niet op de tab ben gefocussed, hoe meer hij dat inhaalt.

UPDATE

Firefox doet nog veel erger. om de 1 MS worden er ruim 10 calls aangeroepen. ONgelofelijk veel.

Is hier geen normale oplossing voor?

Ik denk dat mensen beter "getCurrentPosition" kunnen gebruiken om de x aantal sseconden, want anders word je server overloaded, erg slecht die watch position dus.

Als ik wat options erbij die:


 var options = {enableHighAccuracy: false,timeout: 5000,maximumAge: 0,desiredAccuracy: 0, frequency: 1 };

  function showlocation() {
        navigator.geolocation.watchPosition(callback,error,options);
      }


Ik krijg dan steeds ERROR(3): Timeout expired
als ik van tab 1 seconde wissel en terug kom, dan zijn er 100den calls gedaan.
draait je site op SSL?

Chrome zou dat niet meer zonder willen accepteren. (geolocation is gevoelige info)

--------------
hij laadt
het apparaat verandert
etc
Ja het moet onder SSL idd, maar ik test het via localhost, dat word ook toegelaten door chrome, maar het probleem kan ik tot nu toe nog niet oplossen.
Als je iedere keer een nieuwe watchposition maakt met setInterval, waarom verwacht je dan dat hij echt kan watchen? Je stelt 1 keer een callback in, niet elke 2 seconden. Zo te zien ligt de bug niet in watchposition, maar in het feit dat je het niet als watch gebruikt maar om direct de locatie op te vragen. Dat geeft uiteraard initieel altijd een resultaat, en niet alleen wanneer de positie verandert.
De reden is omdat wanneer ik deze wijze niet gebruik, zelfs met mijn laptop, dan blijft hij de watchposition functie aanroepen, terwijl ik niet van locatie verander.

Ik zoek dus een manier dat ik watchposition kan instellen om de positie om de x aantal sec te bekijken en de callback functie uitvoert. Ik wil geen serveroverload als 1000 gebruikers deze functie gebruiken op deze manier

Deze functie zet de coordinaten in de database alleen als het verschil met de vorige locatie groter is dan 10 meter.
Dan zet je die eisen in de callback functie, het gebruik van setInterval is nergens voor nodig en werkt averechts.
Maar als ik die eisen in de callback functie wil zetten, hoe doe ik dat dan anders als setinterval of settimeout ?

UPDATE,

ook al gebruik ik die setinterval niet,dus

 var options = {enableHighAccuracy: false,timeout: 5000,maximumAge: 0,desiredAccuracy: 0, frequency: 1 };

watchID = navigator.geolocation.watchPosition(callback, error, options);

      function callback(position) {
        var lat = position.coords.latitude;
        var lng = position.coords.longitude;
        $.post('<?=HTML_ROOT?>inc/addcurrentloc.php', 'lat=' + lat + '&lng=' + lng, function(response) 
		{
          console.log(response);
        }
       );
      }


het blijft net zo buggy, elke keer als ik van tab verwissel en weer terug ga, dan word de call 5 keer aangeroepen binnen 1 seconde.
watchposition ziet dus niet goed of een apparaat beweegt of niet.

>> watchposition ziet dus niet goed of een apparaat beweegt of niet.
Waarom controleer je dan niet in de callback functie of de positie veranderd is?
Ik doe dat nu in de backend met php, maar hij blijft de callback aanroepen. Ik zoek een manier om de callback niet zo vaak aan te roepen, dus om de 10 seconde bijv. Of als er een manier in om de controleren in de clintside wat de laatste positie is, wat voor minder overhead zorgt, dat ga ik daarvoor.
Hij bekijkt nu dus al in addcurrentloc.php of de positie veranderd is, dat zit in de callback functie, maar ik probeer de overhead te minimaliseren.

Reageren