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?
Hoezo niet? Je slaat in je callback functie op wat de laatst bekende positie was. Wanneer deze gelijk is aan de huidige positie return je uit de callback zonder een request te doen. Hetzelfde geldt voor afstand, gewoon vergelijken met de laatst bekende positie. Dit hoeft niet in PHP (al is het handig om het daar ook te doen) en kan gewoon in je callback functie.
Dit is niet wat ik bedoel.Op deze manier kijk je gewoon of de oude coordinates exact hetzeflde zijn en de nieuwe.
ik wil erachter komen, hoe ik de afstand van de oude en nieuwe coordinaten in meters kan berekenen.
Als de nieuwe locatie 1 meter is, dan wil ik die call naar addcurrentloc.php niet uitvoeren. Zoals ik aangaf is de watchposition niet foutloos. Hij blijft aangeven dat mijn locatie een aantal centimeters wellciht veranderd, terwijl hij niets veranderd. Als de afstand min 5 meter is, dan wil ik die call uitvoeren.
ik denk dat deze wel juist is
Alleen als de site verniewd word en oldlat,oldlng dan leeggehaald? hoe lang blijf hij dat onthouden? Wellicht beter in php sessies opslaan...
function getDistanceFromLatLonInKm(lat1,lon1,lat2,lon2) {
var R = 6371; // Radius of the earth in km
var dLat = deg2rad(lat2-lat1); // deg2rad below
var dLon = deg2rad(lon2-lon1);
var a =
Math.sin(dLat/2) * Math.sin(dLat/2) +
Math.cos(deg2rad(lat1)) * Math.cos(deg2rad(lat2)) *
Math.sin(dLon/2) * Math.sin(dLon/2)
;
var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
var d = R * c; // Distance in km
return d / 1000;
}