Devo determinare la posizione di una persona entro 50 m. Mi chiedo se dovrei usare navigator.location.watchPostion()
o chiamare getCurrentPostion()
più e più volte. watchPostion()
è la corretta API W3C per fare ciò che voglio, ma in pratica sembra essere eccessivo.watchPosition() vs getCurrentPosition() con setTimeout
Ecco il mio codice:
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();});
ho notato watchPostion()
sembra risultare in ultima analisi, a una maggiore precisione (dopo un po '), ma mi chiedo se la posizione cambia così velocemente che si traduce in un sacco di cosa viene scaricata sulla tela della mia mappa, con richieste http costanti che sono presto superate, sostituite da quelle nuove in arrivo. Quando uso watchPosition()
, ci vuole un po 'prima che la pagina venga caricata.
Esiste un modo per pubblicare un esempio del codice HTML + Javascript completo della soluzione? Comprese le chiamate listener e enableContinuousZoom()? Non ho familiarità con GMap2 e quindi devo decodificare ... Ma potrebbe salvare qualcun altro nei miei panni un giorno di lavoro ... – ftrotter
Controlla il commento dove ho risposto a Sam qui sotto. – devlord
Guardando la documentazione sembra che ci sia qualcosa che manca tra gli estremi di GetCurrentPosition (che esegue il gestore di successo ASAP) e WatchPosition (che è progettato per essere eseguito tutto il tempo che l'utente è sulla pagina). Mi sarebbe piaciuta l'opzione "soglia di accuratezza" nella chiamata a GetCurrentPosition, che attende questa precisione o il timeout. A meno che nessun altro lo abbia già creato utilizzando WatchPosition, credo che lo farò ora. –