Estoy pensando en escribir software para tratar con GPS Tracks y Waypoints (principalmente almacenar, mostrar y calcular métricas como velocidad, pendiente y algunas estadísticas simples).
Me pregunto cuál debería ser el modelo de datos más robusto conceptualmente con respecto a los puntos de seguimiento, y aquí hay algunos "candidatos":
Considerando las pistas como secuencias de puntos de seguimiento:
1.1. Las pistas se consideran "2D", ya que las proyecciones de mapas son 2D. Los puntos de seguimiento pueden o no tener elevación, pueden o no tener marca de tiempo. La elevación y la marca de tiempo se consideran "extras", "opcionales". Para aplicaciones terrestres, la elevación es una función directa de lat / lon (obtenible a través de DEM);
1.2. Las pistas se consideran "3D" ya que el espacio geográfico es, de hecho, 3D, y la trayectoria del receptor es 3D (la proyección 2D es, por lo tanto, una forma de reducción de datos). La marca de tiempo puede o no estar presente (la pista podría haberse dibujado a mano).
1.3. Las pistas se consideran "4D" (3 espaciales + tiempo). Por lo tanto, un mapa dibujado a mano es un caso especial donde la elevación y la marca de tiempo están
null
o no presentes, pero las propiedades del Trackpoint siempre están "allí".Las pistas se consideran diccionarios de secuencias, donde todas las secuencias tienen la misma longitud. Hay una lista de latitudes, una lista de longitudes, una lista de elevaciones, una de las marcas de tiempo, etc. Esto facilita el cálculo de estadísticas de cada propiedad, y el concepto de Trackpoint se vuelve "virtual" en cierto sentido, ya que es un sección transversal de muchas corrientes.
Si entendí bien, el formato GPX adopta 1.1., KML adopta 1.2. (sin soporte para la marca de tiempo), y la API de Strava adopta 2. (en formato JSON), pero al final estos son solo formatos de ARCHIVO para la serialización y el almacenamiento, no necesariamente para el modelado, la representación computacional y la combinación de números.
¿Hay alguna forma preferible, en un sentido orientado a objetos, y por qué? (Creo que al menos una tipificación fuerte y un modelado sensato evitarían operaciones que no tienen sentido).
EDITAR: algunas preguntas adicionales "intrigantes":
- ¿Es una pista dibujada a mano CONCEPTUALMENTE lo mismo que un tracklog grabado por el dispositivo? ¿Deberían ser de diferentes tipos de datos?
- ¿Debería considerarse "correcto" que KML almacena elevaciones nulas como cero? Cero ES una elevación, y si no conoce la elevación, no debería asignarle un cero numérico, ¿no?
- ¿Debería importar, en una pista con elevación, si la elevación se extrae de datos DEM ("fuera de línea") o de datos GPS o datos barométricos ("en el campo")? ¿Debería estar marcado en el objeto Track? ¿Guardado en diferentes propiedades de Trackpoint? ¿Ignorado? ¿Deberían ser diferentes tipos de datos de recopilación?
- Si edito una pista grabada en un dispositivo en un editor de mapas (agregando, moviendo y eliminando puntos), o combino pistas de diferentes fechas, ¿cómo deben manejarse las marcas de tiempo en los puntos de seguimiento? ¿Deberían "restablecerse" a nulo? ¿Debería crearse un objeto (colección de puntos de seguimiento) de un tipo diferente de los anteriores?
<>
y{}
para ayudarlo a organizar sus datos, y metadatos, lo está haciendo mal.