Muszę określić lokalizację osoby w promieniu 50m. Zastanawiam się, czy powinienem używać navigator.location.watchPostion()
lub dzwonić getCurrentPostion()
w kółko. watchPostion()
jest właściwym API W3C do robienia tego, co chcę, ale praktycznie wydaje się, że to przesada.watchPosition() vs getCurrentPosition() z setTimeout
Oto mój kod:
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();});
Zauważyłem watchPostion()
wydaje się ostatecznie skutkować większą dokładnością (po jakimś czasie), ale zastanawiam się, czy pozycja zmienia się tak szybko, że wynika to w wielu rzeczy, które są pobierane do mojego płótna mapy, ze stałymi żądaniami http, które są wkrótce przestarzałe, zastąpione nowymi. Kiedy używam watchPosition()
, ładowanie strony zajmuje trochę czasu.
Czy jest jakiś sposób, aby opublikować przykład pełnego kodu HTML + JavaScript rozwiązania? W tym wywołania funkcji Listener i enableContinuousZoom()? Nie jestem obeznany z GMap2 i dlatego muszę wykonać inżynierię wsteczną ... Ale może pewnego dnia uratuje się ktoś w moich butach ... – ftrotter
Sprawdź komentarz, w którym odpowiedziałem Samowi poniżej. – devlord
Patrząc na dokumentację, wydaje się, że czegoś brakuje między skrajnościami GetCurrentPosition (która uruchamia program ASAP) i WatchPosition (który ma działać przez cały czas, gdy użytkownik jest na stronie). Wolałbym opcję "progu dokładności" w wywołaniu GetCurrentPosition - która czeka na taką dokładność lub limit czasu. O ile nikt inny nie stworzył tego przy użyciu WatchPosition, chyba zrobię to teraz. –