2016-03-22 2 views
0

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?

+0

'Reihe + = 120'? 'arow = 1'? – greenapps

+0

'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

+0

@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

Antwort

0

Ich fand es heraus. Der Grund, warum die GPS-Daten nicht mehr aktualisiert wurden, ist, dass die Zeile, die es zu aktualisieren versuchte, noch nicht erstellt wurde. Als ich anfange, meine Reise zu verfolgen, starte ich die Beschleunigungsmesseruhr zuerst und es fängt an, die Beschleunigungsmesseranzeigen einzusetzen. Ich starte dann die GPS-Uhr, die die Beschleunigungsmesserzeilen aktualisiert, die mit den GPS-Anzeigen erstellt wurden.

Das Problem war, dass die Beschleunigungsmesseruhr so ​​viele Einfügungen in die Datenbank machen muss, dass sie über die 3 Sekunden etwas langsamer ist, so dass die GPS-Uhr sie schließlich einholt und versucht, eine nicht erstellte Zeile zu aktualisieren . Sobald die GPS-Uhr die Uhr des Beschleunigungsmessers passiert, kann ich die GPS-Messwerte nicht speichern.

Eine Lösung besteht darin, die GPS-Uhr auf 3,5 Sekunden Abtastrate zu verlangsamen oder sie von der "Aktualisierung" der Beschleunigungsröhren auf eine "Einfügung" zu ändern. Wenn es zu einer Einfügung geändert wird, wird es jedoch zu jeder dritten Sekunde in der Datenbank doppelte Zeilen geben. Aus diesem Grund habe ich es geändert, um es zu aktualisieren.

+0

'Ich habe es herausgefunden. ' 'weil die Zeile, die es zu aktualisieren versuchte, noch nicht erstellt wurde'. Ja, das habe ich dir gesagt. Aber du hast es nicht verstanden !? – greenapps

+0

@greenapps Nein beim Lesen Ihrer Kommentare Ich glaube, Sie dachten, dass es ein Problem mit der Zeilenvariable gab. Dies war nicht das Problem, das Problem ist, dass die Verzögerung von allen 'Einfügungen' der Beschleunigungsmesserdaten etwas mehr als 3 Sekunden ist, so dass meine GPS-Daten 'Aktualisierungen' schließlich aufholen und die Beschleunigungsmesserdaten, die eingefügt werden, passieren. Sobald es übergeben wird, wird keine Zeile erstellt, damit die GPS-Daten "aktualisiert" werden können. Es ist schwer zu erklären, ich bin mir nicht sicher, ob du mich verstehst. – Antonio

+0

Ich verstand, dass das von Anfang an das Problem war und versuchte es Ihnen zu sagen. Du hättest das jetzt verstehen sollen. Lies meinen zweiten Kommentar. Es erzählt allen. Sie können die Zeile 120 nicht aktualisieren, wenn nur 100 existieren, die ich geschrieben habe. – greenapps

Verwandte Themen