1

Ich arbeite an einer App zum Spaß, mit der Sie Routen aufnehmen können, die Sie nehmen. Ich nutze dies, um etwas über das Google Maps API und Phonegap Build zu erfahren, also sind das die Tools, die ich hier verwende.Wie kann eine PhoneGap-Anwendung die aktuelle Geolokalisierung seltener speichern?

Ich habe eine rudimentäre App erstellt, die Positionsdaten (lat, lng) in einem Array sammelt und dann die API von Google verwendet, um die Ergebnisse auf einer Karte anzuzeigen. In der Zukunft möchte ich sie mit einer Linie verbinden, Kommentare zulassen und so weiter.

Hier ist, was eine Fahrt um meine Nachbarschaft wie folgt aussieht:

a trip around with coordinates

recht ordentlich. Aber hier stimmt etwas nicht. Ein längerer Trip stürzt die App ab, wenn versucht wird, so viele Koordinatenpunkte abzubilden. Hier wird in the docs der Options-Hash beschrieben. Meine sieht so aus:

var options = { maximumAge: 1000, timeout: 3000, enableHighAccuracy: true }; 

Ich bin mir nicht sicher, ob ich die Erklärung vollständig verstehe. maximumAge scheint zu bedeuten, dass, wenn keine neuen GPS- oder Standortdaten vorhanden sind, einfach die vorherige verwendet wird. Wenn Sie also 9999999 einstellen, sollten die Daten im Cache niemals verwendet werden.

Timeout ist schwieriger. Es scheint, dass Standortinformationen keine Garantie darstellen und daher manchmal einen Fehler auslösen. Aber macht die Erhöhung dieser Zahl eine Route mit weniger Handlungspunkten? Wo kann ich herausfinden, dass ein GPS-System zusammen mit einem Telefon funktioniert?

Wie können Sie diese Konfigurationen ändern, um genauere Punkte mit weniger Punkten zu erhalten?

+0

prüfen dieses Plugin, ist es für die Verfolgung: https://github.com/mauron85/cordova-plugin-background-geolocation – Joerg

+1

[GPS ist Unzuverlässige] (https://github.com/jessemonroy650/googleMapExamples/wiki /GPSisUnreliable.md) – JesseMonroy650

Antwort

0

sollten Sie navigator.geolocation.watchPosition verwenden. Gibt die aktuelle Position des Geräts zurück, wenn eine Positionsänderung erkannt wird. Wenn das Gerät einen neuen Standort abruft, wird der GeolocationSuccess-Rückruf mit einem Position-Objekt als Parameter ausgeführt. Wenn ein Fehler auftritt, wird der GeolocationError-Callback mit einem PositionError-Objekt als Parameter ausgeführt.

Syntax

var watchId = navigator.geolocation.watchPosition(geolocationSuccess, 
               [geolocationError], 
               [geolocationOptions]); 

Beispiel

// onSuccess Callback 
// This method accepts a `Position` object, which contains 
// the current GPS coordinates 
// 
function onSuccess(position) { 
    var element = document.getElementById('geolocation'); 
    element.innerHTML = 'Latitude: ' + position.coords.latitude  + '<br />' + 
         'Longitude: ' + position.coords.longitude  + '<br />' + 
         '<hr />'  + element.innerHTML; 
} 

// onError Callback receives a PositionError object 
// 
function onError(error) { 
    alert('code: ' + error.code + '\n' + 
      'message: ' + error.message + '\n'); 
} 

// Options: throw an error if no update is received every 30 seconds. 
// 
var watchID = navigator.geolocation.watchPosition(onSuccess, onError, { timeout: 3000 }); 

Nun wird diese Art und Weise nur, wenn Standort-Gerät mit weniger Plotpunkte so Strecke bewegt wird, erfasst werden. ändern Sie Zeitüberschreitung gemäß Ihrer Anforderung.

clearwatch Wenn Sie nicht mehr nach Änderungen am Standort des Geräts suchen möchten.

+0

Das ist, was ich benutze. 'watchPosition'. Aber das ist es, was GPS oft anpingt. Sie sagen, Timeout ist das Problem? –

+0

Ja, erhöhen Sie das Timeout, wenn Sie weniger Punkte benötigen. –

Verwandte Themen