Ich habe ein Problem beim Speichern meiner Standortdaten für meine Reise-Tracking-App. Ich verwende sowohl den Beschleunigungssensor als auch den GPS-Standort in meiner App. Alle Daten werden in der sqlite-Datenbank des Telefons gespeichert. Die Abtastrate für den Beschleunigungssensor beträgt 25 ms und 3000 ms für das GPS. Also für alle 120 Beschleunigungsmesser, die ich in die Datenbank einlege, wird ein GPS-Messwert eingefügt.Phonegap GPS-Tracking stoppt das Einfügen in SQLite-Datenbank nach 30 Sekunden
Dies funktioniert perfekt für etwa 30 Sekunden, dann die App merkwürdigerweise stoppt das Hinzufügen der GPS-Messwerte, aber es fügt weiterhin die Beschleunigungsmesser Messwerte.
Unten ist meine Watch-Funktion, die alle 3 Sekunden alle Messungen vom GPS durchführt. Der Grund, warum ich das verwende, ist, weil ich vorher Probleme mit der Watch-Funktion für das Plugin hatte.
SetupWatch Funktionscode:
var activeWatch=null;
// sets up the interval at the specified frequency
function setupWatch(freq) {
activeWatch = setInterval(watchLocation, freq);
}
// stop watching
function logout() {
clearInterval(activeWatch);
}
Uhr Funktionscode:
function watchLocation() {
var gcp = navigator.geolocation.getCurrentPosition(
// Success
function(position){
newlongitude = position.coords.longitude;
//alert("New "+newlongitude)
newlatitude = position.coords.latitude;
newSpeed = position.coords.speed;
//alert(position.coords.speed);
var timestamp = new Date().toISOString().slice(0, 19).replace('T', ' ');
//alert(timestamp);
insertDB(track_id, newlongitude,newlatitude,newSpeed,timestamp,row);
row+=120;
},
// Error
function(error){
alert(error.message);
}, {
enableHighAccuracy: true
});
}
Unten ist die Funktion, die ich verwende, um die GPS-Messungen in der Datenbank einzufügen. Ich verwende die sql update-Anweisung, um die Zeile zu aktualisieren, die bereits aus dem Beschleunigungsmesser mit dem GPS-Messwert und der aktuellen Kompassrichtung erstellt wurde.
InsertDB Funktionscode:
function insertDB(trackID, longi,lat,speed, time,arow){
//alert(Longi + " " + Lat);
watch_Comp = navigator.compass.getCurrentHeading(onSuccess, onError,compassOptions);
function onSuccess(heading) {
newDir = heading.magneticHeading;
//alert(newDir);
if(arow===0){
arow=1;
}
//alert("update row "+arow);
db.transaction(function(tx){
tx.executeSql('UPDATE DEMO SET longitude = '+'\''+longi+'\''+', latitude = '+'\''+lat+'\''+
', speed = '+'\''+speed+'\''+ ', time = '+'\''+time+'\''+', direction = '+'\''+newDir+'\''+
' WHERE uniqueID = ' + '\''+arow+'\'');
}, errorCB);
};
function onError(error) {
alert('CompassError: ' + error.code);
};
var compassOptions = {
frequency: 3000
};
Wer noch keine Ahnung, was dies zu verursachen könnte?
'Reihe + = 120'? 'arow = 1'? – greenapps
'Also für jede 120 Beschleunigungsmesser Lesungen, die ich in die Datenbank eingegeben habe, ist ein GPS-Messwert eingefügt. Kaum zu glauben. Das ist, was du willst. Es könnte nur 100 sein. Oder 25. Oder eins. – greenapps
@greenapps 'arow' ist genau das, was ich es in der Funktion insertDB genannt habe, aber es könnte als Zeile bezeichnet werden und es würde perfekt funktionieren, da es nur der Name des Parameters innerhalb dieser Funktion ist. Entschuldigung, ich habe das wahrscheinlich nicht gut erklärt, ja, alle 120 Beschleunigungsmesserablesungen werden ein GPS-Messwert eingefügt, weil jeder Beschleunigungsmesser alle 25 ms auftaucht. 120 x 25 = 3000 ms (3 Sekunden). – Antonio