Pregunta

Estoy trabajando en una aplicación donde uno de los requisitos es poder realizar operaciones de geocodificación inversa en tiempo real basadas en datos de GPS. En particular, debo poder determinar el estado / provincia al que se asigna un par de latitud, longitud y detectar cuándo nos hemos mudado de un estado / provincia a otro.

Tengo un par de ideas hasta ahora, pero me preguntaba si alguien tenía alguna idea sobre alguno de los siguientes:

  • ¿Cuál es el mejor enfoque para abordar este problema de manera eficiente?
  • Dónde es un buen lugar para encontrar y cuál es el formato apropiado para los límites de los estados / provincias de América del Norte

Como entrante, estas son las dos ideas principales que tengo:

  1. Divida América del Norte en una cuadrícula con cada rectángulo en el mapa de cuadrícula a una provincia estatal en particular. Realice una búsqueda en esta tabla (que crece rápidamente cuanto más preciso le gustaría ser) en función de la latitud y luego la longitud (o viceversa).
  2. Defina polígonos para cada uno de los estados y haga algún tipo de cálculo para determinar en qué polígono se encuentra un par lat / lon. No estoy seguro exactamente cómo hacer esto. Los mapas de imágenes HTML vienen a la mente como una forma de definir los límites para un estado / provincia.

Estoy trabajando en Python para los interesados ??o aquellos que podrían tener una buena biblioteca que les gustaría sugerir.

Para ser claros ... No tengo acceso web disponible para mí, por lo que usar un servicio de geocodificación inversa existente no es una opción en tiempo de ejecución

¿Fue útil?

Solución

Sugiero usar una variante de su primera idea: use un índice espacial . Un índice espacial es una estructura de datos construida a partir de rectángulos, asignando lat / long a la carga útil. En este caso, probablemente asigne rectángulos a pares de estado-provincia. Un R-tree puede ser una buena opción. Aquí hay un paquete R-tree python . Puede detectar el roaming comparando los resultados de búsquedas consecutivas.

Otros consejos

Creé un módulo de geocodificación inversa sin conexión para países: https://bitbucket.org/richardpenman/reverse_geocode

>>> import reverse_geocode 
>>> coordinates = (-37.81, 144.96), (31.76, 35.21)
>>> reverse_geocode.search(coordinates)
[{'city': 'Melbourne', 'code': 'AU', 'country': 'Australia'},
 {'city': 'Jerusalem', 'code': 'IL', 'country': 'Israel'}]

Veré si puedo agregar datos para los estados.

Me mantendría alejado de implementar su propia solución desde cero. Esta es una empresa bastante grande y ya existen herramientas para hacerlo. Si está buscando un enfoque de código abierto (lea: gratis), eche un vistazo a esta publicación de blog: Uso de PostGIS para invertir el geocódigo .

Si puede controlar los límites de estado como polígonos (por ejemplo, a través de OpenStreetMap), determinar el estado actual es solo una prueba de punto en polígono.

Si necesita datos de dirección, una solución fuera de línea sería usar Microsoft Mappoint.

Puede obtener datos para todos los Estados Unidos de abrir el mapa de calles . Luego puede extraer los datos que necesita ubicaciones de ciudades o estados en cualquier formato que funcione mejor para su aplicación. Tenga en cuenta que aunque la calidad de los datos es buena, no se garantiza que sea completamente precisa, por lo que si necesita una precisión completa, es posible que tenga que buscar en otro lugar.

Tengo una base de datos con todos estos datos y algunas herramientas de acceso. Hice el mío a partir de los datos del censo del tigre. Me imagino que básicamente sería una exportación de mi base de datos a sqlite y un poco de traducción de código.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top