Ich denke darüber nach, eine Software für den Umgang mit GPS-Tracks und Wegpunkten zu schreiben (hauptsächlich zum Speichern, Anzeigen und Berechnen von Metriken wie Geschwindigkeit, Steigung und einigen einfachen Statistiken).
Ich frage mich, was das konzeptionell robusteste Datenmodell in Bezug auf Trackpoints sein sollte, und hier sind einige "Kandidaten":
Tracks als Sequenzen von Trackpoints betrachten:
1.1. Spuren werden als "2D" betrachtet, da Kartenprojektionen 2D sind. Trackpoints haben möglicherweise eine Höhe oder einen Zeitstempel. Höhe und Zeitstempel gelten als "Extras", "optional". Für terrestrische Anwendungen ist die Höhe eine direkte Funktion von lat / lon (erhältlich über DEM).
1.2. Spuren werden als "3D" betrachtet, da der geografische Raum tatsächlich 3D ist und die Flugbahn des Empfängers 3D ist (2D-Projektion ist daher eine Form der Datenreduktion). Möglicherweise ist ein Zeitstempel vorhanden oder nicht (die Spur wurde möglicherweise von Hand gezeichnet).
1.3. Tracks werden als "4D" (3 räumliche + Zeit) betrachtet. Daher ist eine handgezeichnete Karte ein Sonderfall, bei dem Höhe und Zeitstempel vorhanden sind
null
oder auf andere Weise nicht vorhanden sind, die Trackpoint-Eigenschaften jedoch immer "da" sind.Tracks werden als Wörterbücher von Streams betrachtet, bei denen alle Streams gleich lang sind. Es gibt eine Liste von Breitengraden, eine Liste von Längengraden, eine Liste von Höhen, eine Liste von Zeitstempeln usw. Dies erleichtert die Berechnung von Statistiken für jede Eigenschaft, und das Konzept von Trackpoint wird in gewissem Sinne "virtuell", da es sich um ein Querschnitt vieler Bäche.
Wenn ich richtig verstanden habe, übernimmt das GPX-Format 1.1, KML 1.2. (ohne Unterstützung für Zeitstempel) und Strava API übernimmt 2. (im JSON-Format), aber am Ende handelt es sich nur um FILE-Formate für die Serialisierung und Speicherung, nicht unbedingt für die Modellierung, rechnerische Darstellung und Zahlenkalkulation.
Gibt es eine Form, die objektorientiert vorzuziehen ist, und warum? (Ich glaube, dass starke Typisierung und vernünftige Modellierung zumindest Operationen vermeiden würden, die keinen Sinn ergeben.)
EDIT: einige "faszinierende" Zusatzfragen:
- Ist eine von Hand gezeichnete Spur KONZEPTUELL dasselbe wie ein von einem Gerät aufgezeichnetes Tracklog? Sollten sie unterschiedliche Datentypen haben?
- Sollte es als "korrekt" betrachtet werden, dass KML Null-Erhebungen als Null speichert? Null IST eine Erhebung, und wenn Sie die Erhebung nicht kennen, sollten Sie ihr keine numerische Null zuweisen, nicht wahr?
- Sollte es bei einer Strecke mit Höhenangabe eine Rolle spielen, ob die Höhenangabe aus DEM-Daten ("offline") oder aus GPS-Daten oder Luftdruckdaten ("vor Ort") extrahiert wird? Soll dies im Track-Objekt markiert werden? In verschiedenen Trackpoint-Eigenschaften gespeichert? Ignoriert? Sollten sie unterschiedliche Sammlungsdatentypen sein?
- Wenn ich eine vom Gerät aufgezeichnete Spur in einem Karteneditor bearbeite (Hinzufügen, Verschieben und Entfernen von Punkten) oder Spuren von verschiedenen Daten kombiniere, wie sollen die Zeitstempel in den Spurpunkten behandelt werden? Sollten sie auf null "zurückgesetzt" werden? Soll ein Objekt (Trackpoint-Sammlung) eines anderen Typs als das vorherige erstellt werden?
<>
und benötigen{}
, um Ihre Daten - und Metadaten - zu organisieren, machen Sie es falsch.