GPS-Daten speichern und abrufen

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
bastler
Beiträge: 10
Registriert: Sa 30. Jan 2016, 15:54

GPS-Daten speichern und abrufen

Beitrag von bastler »

Hallo an Alle,

ich habe eine Konzeptfrage. Ich habe ein GPS-Modul, von dem ich regelmäßig Daten in meiner Anwendung erhalte. Hauptsächlich zeige ich die GPS-Daten nur einmalig live als Wert in einem Form an. Nun will ich aber eine Track-Verlaufs-Anzeige bauen. Dazu muss ich logischerweise die GPS-Daten (Longitude und Latitude + evtl. Zeitstempel) speichern. Wenn ich den Track zeichne, muss ich die gespeicherten Daten wieder abfragen/auslesen. Der Track wird entweder komplett neu gezeichnet, wenn aus einem anderen Menü auf die Track-Anzeige geklickt wird, oder wenn man schon in der Track-Anzeige ist, wird der Track fortgeführt gezeichnet, also ergänzt mit jedem neuen Wert.

Was würdet ihr für die Speicherung der GPS-Daten empfehlen? Wegschreiben in eine Textdatei oder doch schon eine kleine Datenbank nehmen? Hätte da an TDbF gedacht. Oder überlebt das die Anwendung auch, wenn ich einen sehr Großen Integer-Array nehme. Datenmäßig würden da ca. 45 MB auflaufen. Nach Beendigung der Anwendung, brauche die Daten nicht mehr unbedingt. Sie können dann also gelöscht werden.

Danke für eure Hilfe!
Der bastler

Socke
Lazarusforum e. V.
Beiträge: 3158
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: GPS-Daten speichern und abrufen

Beitrag von Socke »

bastler hat geschrieben:Was würdet ihr für die Speicherung der GPS-Daten empfehlen? Wegschreiben in eine Textdatei oder doch schon eine kleine Datenbank nehmen? Hätte da an TDbF gedacht. Oder überlebt das die Anwendung auch, wenn ich einen sehr Großen Integer-Array nehme. Datenmäßig würden da ca. 45 MB auflaufen. Nach Beendigung der Anwendung, brauche die Daten nicht mehr unbedingt. Sie können dann also gelöscht werden.

Wenn du die Daten nach einem Neustart bzw. Programmabsturz nicht mehr brauchst, kannst du die in einem Array speichern. Hier solltest du aber nicht für jeden neuen Wert die Größe des Arrays um 1 erhöhen.
Alternativ verwendest du z.B. spezialisierte Listen.

Wenn du die GPS-Daten extern speichern möchtest, solltest du dich an einem vorhandenn Standard, z.B. GPS Exchange Format halten. Damit steigen die Chancen, dass andere Programme deine Aufzeichnung auch lesen können.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: GPS-Daten speichern und abrufen

Beitrag von wp_xyz »

Was sind heute schon 45 MB? Ich würde ein Array nehmen, das ich im Speicher halte, nachdem du die Werte später nicht mehr benötigst. Aber warum redest du von Integer-Array? GPS-Koordinaten sind doch Gleitkommazahlen, so wie ein Winkel. Für die Auflösung von 1" (8E-7°, etw 30 m, https://wiki.openstreetmap.org/wiki/DE: ... oordinaten) reichen Double-Zahlen . Je nachdem, wenn du noch viel rechnen musst oder mehr Genauigkeit brauchst, ist wahrscheinlich Extended günstiger, wegen der Rundungsfehler. Pro Datenpunkt hast du dann 20 Byte, und in die 45MB würden etwas mehr als 2 Millionen Punkte passen. Falls du lieber in Grad-Minuten-Sekunden getrennt als Integer speichern willst, brauchst du zwar nur - ich würde sagen - 4 oder 6 Byte pro Wert (eher 6), aber du hast beim Zugriff immer den Aufwand, das in eine Gleitkommazahl umzurechnen.

bastler
Beiträge: 10
Registriert: Sa 30. Jan 2016, 15:54

Re: GPS-Daten speichern und abrufen

Beitrag von bastler »

Danke für eure Antworten!

Dann werde ich einen Array nehmen. Integer-Array deswegen, da ich schon eine Dezimalkoordinate als Integerwert von der Elektronik bekomme (Latitude z.B. 50123456). Will ich sie als Gleitkommazahl anzeigen, formatiere ich sie mit formfloat in latitude/1000000 um. Alle internen Geschichten mache ich mit den Integerwerten. Da brauch ich somit nie umzurechnen.

Socke meinte, dass ich den Array nicht ständig vergößern soll. Also definiere ich ihn gleich mit

Code: Alles auswählen

gpsposLat: array[0..15000] of Integer;

Socke
Lazarusforum e. V.
Beiträge: 3158
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: GPS-Daten speichern und abrufen

Beitrag von Socke »

bastler hat geschrieben:Socke meinte, dass ich den Array nicht ständig vergößern soll. Also definiere ich ihn gleich mit

Code: Alles auswählen

gpsposLat: array[0..15000] of Integer;

Wenn du vorher weißt, wie viele Koordinatenpunkte du maximal haben wirst, kannst du das so machen.

Mit meinem Kommentar bezog ich mich auf dynamische Arrays; mit folgender Konstruktion kannst du ein 32-Bit-Programm Programm auch bei 15000 Datenpunkten ganz gut unnötig verlangsamen. Besser wäre es, den Array immer in Blöcken zu vergrößern und in einer weiteren Variablen den aktuell höchsten belegten Index zu vermerken.

Code: Alles auswählen

var
  a: array of Integer;
begin
  while True do
    setlengh(a, length(a) + 1);
end;
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Antworten