Ich muss den Standort einer Person innerhalb von 50m ermitteln. Ich frage mich, ob ich navigator.location.watchPostion()
oder getCurrentPostion()
immer wieder verwenden sollte. watchPostion()
ist die richtige W3C API für das, was ich will, aber praktisch scheint es übertrieben zu sein.watchPosition() vs getCurrentPosition() mit setTimeout
Hier ist mein Code:
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();});
ich bemerkt habe watchPostion()
in mehr Genauigkeit (nach einer Weile), um schließlich zur Folge haben scheint, aber ich frage mich, ob die Position so schnell ändert, dass es in vielen Ergebnisse der Sache, die auf meinen Kartenbereich heruntergeladen wird, mit konstanten http-Anforderungen, die bald veraltet sind, ersetzt durch die neuen, die hereinkommen. Wenn ich watchPosition()
verwende, dauert es eine Weile, bevor die Seite geladen wird.
Gibt es eine Möglichkeit, ein Beispiel für das vollständige HTML + Javascript Ihrer Lösung zu veröffentlichen? Einschließlich der Listener und aktivierenContinuousZoom() Anrufe? Ich bin mit GMap2 nicht vertraut, und deshalb muss ich Reverse Engineering ... Aber es könnte jemand anderes in meinen Schuhen einige Arbeit eines Tages retten ... – ftrotter
Überprüfen Sie den Kommentar, wo ich auf Sam unten antwortete. – devlord
Wenn man sich die Dokumentation anschaut, scheint zwischen den Extremen von GetCurrentPosition (die den Success-Handler ASAP ausführt) und WatchPosition (die für die gesamte Zeit, die der Benutzer auf der Seite läuft) etwas fehlt. Ich hätte gerne eine "Genauigkeitsschwelle" -Option für den GetCurrentPosition-Aufruf - der auf diese Genauigkeit oder auf das Timeout wartet. Es sei denn, jemand hat dies bereits mit WatchPosition erstellt, ich denke, ich mache das jetzt. –