Sto pensando di scrivere software per gestire tracce GPS e waypoint (principalmente per memorizzare, visualizzare e calcolare metriche come velocità, grado e alcune semplici statistiche).
Mi chiedo quale dovrebbe essere il modello di dati concettualmente più solido per quanto riguarda i trackpoint, e qui ci sono alcuni "candidati":
Considerando le tracce come sequenze di trackpoint:
1.1. Le tracce sono considerate "2D", poiché le proiezioni delle mappe sono 2D. I punti di tracciamento potrebbero avere o meno elevazione, o meno il timestamp. L'elevazione e il timestamp sono considerati "extra", "opzionali". Per applicazioni terrestri, l'elevazione è una funzione diretta di lat / lon (ottenibile tramite DEM);
1.2. Le tracce sono considerate "3D" poiché lo spazio geografico è, in effetti 3D, e la traiettoria del ricevitore è 3D (la proiezione 2D è quindi una forma di riduzione dei dati). Il timestamp potrebbe essere o meno presente (la traccia potrebbe essere stata disegnata a mano).
1.3. Le tracce sono considerate "4D" (3 spaziali + tempo). Pertanto, una mappa disegnata a mano è un caso speciale in cui elevazione e data / ora sono
null
o non sono presenti, ma le proprietà Trackpoint sono sempre "lì".Le tracce sono considerate dizionari di flussi, in cui tutti i flussi hanno uguale lunghezza. C'è un elenco di latitudini, un elenco di longitudini, un elenco di elevazioni, uno di timestamp, ecc. Ciò rende facile calcolare le statistiche di ogni proprietà e il concetto di Trackpoint diventa "virtuale" in un certo senso, dal momento che è un sezione di molti flussi.
Se ho capito bene, il formato GPX adotta 1.1., KML adotta 1.2. (senza supporto per il timestamp) e Strava API adotta 2. (in formato JSON), ma alla fine questi sono solo formati FILE per la serializzazione e l'archiviazione, non necessariamente per la modellazione, la rappresentazione computazionale e lo scricchiolio dei numeri.
Esiste una forma preferibile, in senso orientato agli oggetti, e perché? (Credo che la tipizzazione forte e la modellazione sensata almeno evitino operazioni che non hanno senso).
EDIT: alcune domande aggiuntive "intriganti":
- Una traccia disegnata a mano è CONCETTAMENTE la stessa cosa di un tracklog registrato dal dispositivo? Dovrebbero essere di diversi tipi di dati?
- Dovrebbe essere considerato "corretto" che KML memorizzi elevazioni nulle come zero? Lo zero È un'elevazione e se non si conosce l'elevazione non è necessario assegnargli uno zero numerico, vero?
- Dovrebbe importare, in una traccia con elevazione, se l'elevazione viene estratta dai dati DEM ("offline") o dai dati GPS o dati barometrici ("sul campo")? Questo dovrebbe essere contrassegnato nell'oggetto Traccia? Salvato in diverse proprietà Trackpoint? Ignorato? Dovrebbero essere tipi di dati di raccolta diversi?
- Se modifico una traccia registrata dal dispositivo in un editor di mappe (aggiungendo, spostando e rimuovendo punti) o combinando tracce di date diverse, come devono essere gestiti i timestamp nei trackpoint? Dovrebbero essere "reimpostati" su null? Dovrebbe essere creato un oggetto (raccolta trackpoint) di un tipo diverso dai precedenti?
<>
e{}
per aiutarti a organizzare i tuoi dati - e metadati - stai sbagliando.