Estoy usando OpenStreetMap y su red vial vectorial y me gustaría implementar un algoritmo de correspondencia de mapas.
Actualmente, para cada posición GPS, puedo recuperar el segmento de carretera más cercano y calcular la proyección de esta posición a ese segmento, como en esta imagen (el pin rojo es la posición GPS pura, en azul el segmento mapeado y en verde el posición mapeada):
Sin embargo, debido a la falta de precisión del GPS, a veces la posición asignada salta de un segmento a otro y puede proporcionar alguna posición asignada inconsistente de vez en cuando.
Mi algoritmo actual es muy básico: desde la posición GPS pura, obtengo el segmento más cercano y decido que la posición asignada asignada está en este. Sé que esto se puede mejorar realmente.
Me imagino que tomar en cuenta la dirección del vehículo mejorará la correspondencia del mapa, pero ¿conoce algún otro enfoque que me permita mejorar mi correspondencia de mapas?
Busco algún enlace y / o software de código abierto?
Respuestas:
La proyección de puntos en la línea como ya lo está haciendo es posible hacerlo directamente en PostGIS. Escribí sobre hace algún tiempo, aquí
Pero para resolver su problema cuando los puntos están más cerca del segmento incorrecto que el segmento correcto, quizás este sea un posible enfoque.
fuente
Después de leer su pregunta y las diversas respuestas, me interesé en este problema. Después de leer un poco sobre algoritmos de correspondencia de mapas, he entendido lo siguiente:
Para leer más, sugiero lo siguiente:
fuente
¡Respondiendo a mi propia pregunta!
1- Un buen .pdf que acabo de encontrar sobre este tema:
http://safari.ce.sharif.edu/file/2011-06-06/259/2009_An%20off-line%20map-matching%20algorithm%20for%20incomplete%20map%20databases.pdf
que también se vincula a una implementación de código abierto en C ++ del mapa de correspondencia descrito en el documento: http://eden.dei.uc.pt/~camara/files/mgemma.zip
(este es un mapa de correspondencia fuera de línea, entiendo que calcula las posiciones coincidentes del mapa con la ruta ENTERA como entrada y no puede hacerlo sobre la marcha para cada posición).
2- Entonces, acabo de leer esto en profundidad y es realmente bueno en mi opinión: https://dspace.lboro.ac.uk/dspace-jspui/bitstream/2134/4860/1/velaga.pdf "En desarrollo un algoritmo de mapeo topológico basado en peso mejorado para sistemas de transporte inteligentes "
El algoritmo se explica claramente y los valores de ajuste de peso también se proporcionan en el documento.
fuente
Hay mucho trabajo sobre correspondencia de mapas. Vea este documento para una breve encuesta de algunos trabajos bastante recientes (antes de 2007). Más recientemente, los enfoques basados en modelos ocultos de Markov parecen funcionar bastante bien en circunstancias normales. Por ejemplo, consulte este documento de 2009. La idea y el modelo son bastante simples y no deberían darle muchos problemas para implementar, incluso si no está familiarizado con los HMM (en cuyo caso, no se asuste, hay muchos de tutoriales e introducciones en línea)
fuente
El método también se llama "fusión de vectores". Hay una página Wiki dedicada ( http://wiki.openstreetmap.org/wiki/Conflation ) que ofrece una descripción general y listas de paquetes de software (Open Source) para realizar la combinación de vectores de carreteras como "JOSM conflation plugin", "Potlatch 2 merging herramienta "," RoadMatcher "(para OpenJUMP) y otros.
fuente
Para los algoritmos de correspondencia de mapas, depende si necesita un procesamiento en tiempo real o fuera de línea. En el último caso, los algos de última generación pueden procesar ~ 1000 puntos por segundo. Los requisitos de memoria dependen de la cobertura, por supuesto. Hemos logrado exprimir la red de carreteras OSM del planeta en aproximadamente 16 Gb para ese propósito.
Además, debe distinguir la coincidencia de mapas de la inferencia de ruta : estos son dos procesos separados dependiendo de si tiene datos de alta o baja frecuencia. Cuando tiene relativamente pocos puntos (p. Ej., 1 dato por kilómetro en el contexto urbano), es inferencia de ruta, ya que generalmente se debe hacer una suposición para adivinar dónde viaja el dispositivo. La inferencia de ruta suele ser más difícil, pero cada vez tiene menos problemas con los dispositivos modernos / precio de adquisición de datos.
Puede verificar mi perfil para una API que hace correspondencias de mapas directamente en OSM: utiliza coincidencias topológicas y funciona bien con datos flotantes de automóviles, por ejemplo.
fuente
Strava Slide describe cómo los datos de seguimiento acumulados en una red de carreteras pueden comportarse como "valles", y cómo la ruta propuesta "encajaría" como si fuera una cadena de cuentas.
fuente
Después de probar la mayoría de los frameworks mencionados anteriormente, encontré Barefoot y realmente puedo recomendarlo. Utiliza modelos ocultos de Markov como un enfoque probabilístico de correspondencia de mapas (detalles en su documento "Poner el automóvil en el mapa" ) y se implementa en Java. Es de código abierto y está activamente desarrollado por el Departamento de CarIT de BMW.
fuente
El tema se llama correspondencia de mapas. Pero como primera aproximación muy buena, probablemente sea lo suficientemente bueno como para buscar los puntos más cercanos para cada punto gps (sin ninguna corrección que adivine la forma correcta).
Mi proyecto de código abierto llamado graphhopper no es algo que funcione para iOS ( actualización : ahora también funciona en iOS), ni tiene una aplicación de Android totalmente funcional para lo que quieres. Pero podría usar la versión del servidor para crear una aplicación de iOS o usar la demostración de Android sin conexión como un comienzo. He lanzado el algoritmo de correspondencia de mapas aquí , solo un prototipo aproximado, pero funciona sorprendentemente bien.
fuente
Intente y obtenga algunos buenos datos de prueba. Utilice un GPS de registro de seguimiento de mayor precisión adicional, además de los puntos de registro en su dispositivo objetivo. Esto identificará errores en el GPS y en los datos OSM subyacentes. Conocer umbrales sensibles hará que sea mucho más fácil diseñar el algoritmo.
fuente
Si puede obtener datos de carreteras para su región, podría estar interesado en el ajuste automático masivo con FOSS
Dependiendo de si desea trazar datos en tiempo real, o si planea realizar un procesamiento posterior en su PC después, GRASS podría ser de ayuda.
fuente
He encontrado una API que podría hacer el trabajo sin tener que pasar por el esfuerzo de desarrollar una solución propia de inmediato.
Usan datos OSM para hacer correspondencias de mapas. También tienen una página de demostración que permite cargar archivos GPX para ver qué tan bien puede funcionar para usted.
fuente
No necesita mejorar necesariamente la calidad de sus datos. El uso de un algoritmo topológico con una red de carreteras en memoria mejorará considerablemente su correspondencia. Verifique las referencias: http://trb.metapress.com/content/p31485vw72645686
fuente