Geoencoding inversa sin conexión en Python

Estoy escribiendo un script en Python que pasa una latitud y longitud a un módulo y realiza una función de geoencoding inversa para devolver la dirección de la ubicación. He estado usando PyGeoCoder de Google para hacer esto, pero requiere acceso a Internet. Necesito algo similar a PyGeoCoder pero de código abierto y completamente fuera de línea.

¿Has considerado usar OpenStreetMap? Puede descargar la base de datos completa (el “planeta”) o uno de los extractos si solo necesita un área específica. Luego, puede filtrar todas las direcciones y usar los datos resultantes para su geoencoding. Hay varios motores de búsqueda disponibles para OSM, el más popular es Nominatim . Se utiliza en el sitio web principal y puede hacer geoencoding y geoencoding inversa. Por lo tanto, podría ser un buen punto de partida para su tarea.

Creé un módulo para hacer exactamente eso: 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'}] 

Internamente utiliza ubicaciones de la base de datos de geonames y un árbol kd para encontrar al vecino más cercano.