Hola
Carlos:
Con el código que presentas, el
setInterval(ubica, 10000); recarga la página cada 10 segundos. Es normal que, a menos que el navegador te de la opción de aceptar la geocolalización para "esta página, siempre", te la vuelva a pedir.
Es normativo y ajustado al derecho de privacidad del usuario.
Geolocalización W3C (ver
Geolocalización API Especificación) te permite dos formas de acceso, con los parámetros correspondientes:
El primero, el que estás usando (
getCurrentPosition), es:
Código Javascript
:
Ver originalnavigator.geolocation.getCurrentPosition(successCallback, errorCallback,{maximumAge:10000});
maximumAge:10000 le está diciendo al código
"Si el agente de usuario no tiene un fresco mayor que 10 segundos" (es decir, que no la hayas pedido antes de 10 segundos Lo normal sería:
Código Javascript
:
Ver originalvar PositionOptions = {
timeout: 600000,
maximumAge: 50000,
enableHighAccurace: true
};
navigator.geolocation.getCurrentPosition(successCallback, errorCallback, PositionOptions);
timeout: 5000, es el tiempo de espera (5 segundos) antes de lanzar
errorCallback, si no encuentra la posición. Y ahora he extendido a que no la hayas pedido en los 10 minutos anteriores.
Lo que tu estás queriendo hacer es que repita la posición "actual" sin la correspondiente reiteración de autorización. En este caso acudimos a
watchPosition para iniciar la geolocalización y
clearWatch para detenerla.
Código Javascript
:
Ver originalnavigator.geolocation.watchPosition(successCallback, errorCallback);
navigator.geolocation.clearWatch(watchId);
En este caso, reiterará la nueva posición siempre que verifique un cambio de la misma
Todo ello dentro de variables e invocación de funciones como se indica en el API.