Necesito determinar la ubicación de una persona dentro de los 50m. Me pregunto si debería usar navigator.location.watchPostion()
o llamar al getCurrentPostion()
una y otra vez. watchPostion()
es la API correcta de W3C para hacer lo que quiero, pero prácticamente parece excesiva.watchPosition() vs getCurrentPosition() con setTimeout
Aquí está mi código:
var map = null;
var marker = null;
var layer = null;
function locFn(pos) {
var lat = pos.coords.latitude;
var lon = pos.coords.longitude;
$("#hlat").val(lat);
$("#hlong").val(lon);
document.getElementById("lnkMap").href =
"http://maps.google.com/[email protected]" + lat
+ "," + lon + "&z=18&t=h";
var point = new GLatLng(lat, lon);
if (pos.coords.accuracy < 100) {
map.setCenter(point, 18);
if (marker != null) {
marker.setLatLng(point);
}
else {
var ico = new GIcon();
ico.image = "img/Blue-Dot.png";
ico.iconSize = new GSize(22, 22);
ico.iconAnchor = new GPoint(11, 11);
marker = new GMarker(point, { icon: ico });
layer = map.addOverlay(marker, { title: "You are here." });
}
}
else if (pos.coords.accuracy > 2000) {
if (marker != null) { marker.setLatLng(point); }
map.setCenter(point, 15);
}
else if (pos.coords.accuracy > 900) {
if (marker != null) { marker.setLatLng(point); }
map.setCenter(point, 16);
}
else if (pos.coords.accuracy > 100) {
if (marker != null) { marker.setLatLng(point); }
map.setCenter(point, 17);
}
}
function locFail() {
//alert("Failed to retrieve location.");
}
var watchID = null;
function processPoints() {
map = new GMap2(document.getElementById("map_canvas"),
{ mapTypes: [G_HYBRID_MAP] });
try {
watchID = navigator.geolocation.watchPosition(locFn, locFail,
{ enableHighAccuracy: true });
}
catch(err) { /* desktop?*/ }
}
$(function(){processPoints();});
me he dado cuenta de watchPostion()
parece ser el resultado en última instancia, con más exactitud (después de un tiempo), pero me pregunto si la posición cambia tan rápido que resulta en un montón de cosas que se descargan en mi lienzo de mapa, con solicitudes HTTP constantes que pronto están desactualizadas, reemplazadas por las nuevas que entran. Cuando uso watchPosition()
, tarda un tiempo antes de que la página se cargue.
¿Existe alguna manera de que pueda publicar un ejemplo del HTML completo + Javascript de su solución? ¿Incluyendo las llamadas oyente y enableContinuousZoom()? No estoy familiarizado con GMap2 y entonces tengo que hacer ingeniería inversa ... Pero podría salvar a alguien más en mis zapatos algún día ... – ftrotter
Mira el comentario donde respondí a Sam a continuación. – devlord
Al observar la documentación, parece que falta algo entre los extremos de GetCurrentPosition (que ejecuta el controlador de éxito ASAP) y WatchPosition (que está diseñado para ejecutarse todo el tiempo que el usuario está en la página). Me hubiera gustado una opción de 'umbral de precisión' en la llamada GetCurrentPosition, que espera esta precisión o el tiempo de espera. A menos que alguien más haya creado esto usando WatchPosition, supongo que lo haré ahora. –