5 votos

¿Cómo seguir el progreso de una ruta?

Quiero seguir y visualizar el progreso de un autobús, de la siguiente manera:

schematic of a bus on a route map

  • Tengo las coordenadas de cada estación
  • así como las coordenadas del autobús, actualizadas cada 10 segundos

La información se almacena en Postgres, como float tuplas, sin tener en cuenta la topología de las calles ni otros metadatos relacionados con los SIG. Por el momento tengo una implementación ingenua que calcula la distancia "a vuelo de pájaro" entre 2 puntos (el autobús y la siguiente estación prevista). Esto me permite construir una barra de progreso aproximada, pero debido al trazado de las calles en ciertas partes de la ciudad, a veces estas estimaciones son... muy erróneas.

Según tengo entendido, la forma correcta de solucionar este problema es basarse en el "map-matching", que realizará una transformación "snap to road" de las coordenadas del autobús. Esto, a su vez, me permitirá ver la distancia recorrida, como si toda la ruta fuera una línea recta:

6500m out of 10000m were covered by the bus

Sin embargo, no tengo la experiencia del SIG que me daría la seguridad de que (1) voy por buen camino y que (2) elegí el camino de mínima resistencia.

¿Cuáles son las mejores prácticas para abordar este problema?

Actualización: el software actual es un programa Python puro que realiza estos cálculos. No hay herramientas SIG implicadas en absoluto, aunque sospecho que el problema que nos ocupa es probablemente un escenario típico para ellas. Preferiría una solución que utilice software libre de código abierto, que pueda integrarse en los sistemas existentes, una API de Python sería una ventaja.

1voto

vsechnech Puntos 41

Yo probaría con una librería python llamada Shapely. Después de importar topologías en Shapely geometría usted será capaz de crear MultiPoint(colección de Puntos) geometría a lo largo de la línea a la distancia específica. Entonces, lo único que necesitas es el punto más cercano de esta nueva geometría a las coordenadas de tu bus. Cuando lo tengas, mide la distancia desde la primera estación hasta el siguiente punto de la geometría MultiPoint hasta que llegues a tu punto "coincidente" con un autobús. Espero que te sirva de ayuda.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X