Hallo zusammen,
ich möchte mir ein Kommandozeilentool programmieren, mit dem ich auf
SD-Karte gespeicherte NMEA-Daten in eine KML-Datei 'übersetzen' kann.
Die NMEA-Daten kommen direkt von einem GPS-Modul und der AVR schiebt sie
durch auf die SD-Karte. Dann soll halt dieses Tool drüberlaufen und mir
am Ende eine KML-Datei erzeugt haben.
Dazu habe ich bereits einen NMEA-Parser programmiert. Der Quellcode dazu
befindet sich im Anhang. Prinzipiell macht es erstmal nichts anderes,
als ein struct immer mit den gerade eingelesenen Daten aus einem
NMEA-String upzudaten.
Das funktioniert soweit auch erstmal einigermaßen.
Allerdings würde ich gerne wissen, ob das so mehr oder weniger sauber
programmiert ist, oder totaler Schrott? Wie programmiert man soetwas am
schönsten?
Zudem habe ich ein Problem, wenn ich zum Beispiel einen GPGSA-Datensatz
einlese. Wenn nämlich zwischen den Kommata keine Zahl steht, dann
scheint sscanf ein Problem damit zu haben. So wird beispielsweise
folgender Datensatz
1 | $GPGSA,A,3,02,04,27,30,,,,,,,,,4.0,2.0,3.5*32
|
wegen der 'leeren' Datenfelder nicht korrekt gelesen.
Wie könnte ich es hinbekommen, dass sscanf auch mit diesen inexistenten
Daten die drei Genauigkeiten am Ende (PDOP, HDOP, VDOP) korrekt einliest
(möglichst nur mit sscanf, ohne strtok)?
Nun aber zu dem eigentlichen Problem: Ich habe keine Ahnung, wie man
jetzt sauber eine KML-Datei aus den gewonnen Daten erzeugt. Wie
programmiert man soetwas 'schön'?
Die 3-Funktionen-Methode (mit add_beginning(), add_coordinate(),
add_ending(), also die ganzen öffnenden Tags schreiben, dann Placemark
für Placemark hinzufügen, und alle Tags wieder schließen) halte ich für
unelegant.
Im Anhang befindet sich auch schonmal eine KML, wie es so ungefähr
aussehen soll.
Vielen Dank schonmal.
Modellbauer