Geocodificación sin conexión gratuita

Tengo una lista de 2000 direcciones como esta:

Macquarie Park, New South Wales
Kitami, Hokkaido
Hachioji, Tokyo
Pokemon Inc. Asahi Bldg. 7F 3-2-6 Asakusabashi Taito-ku, Tokyo 111-0053 Japan
東京都港区

Y quiero mostrarlos en un mapa sin enviar estas direcciones a través de Internet .

Geocodificación de direcciones:

  • La precisión a nivel de ciudad está bien.
  • Algunas direcciones (como la cuarta arriba) contienen muchos detalles, se pueden omitir, pero puede ser complicado para un algoritmo encontrar lo que se puede omitir de manera segura.
  • Muchas direcciones no tienen el nombre del país. Tenga en cuenta que Google Maps encuentra estos sin ningún problema, por lo que supongo que generalmente no hay ambigüedad.
  • Lugares de todo el mundo.
  • Algunas de las direcciones utilizan escrituras no latinas. Bonificación por geocodificarlos también.

Formato de salida:

  • .osm// la salida .obfdel .kmlarchivo está bien.
  • La salida de latitud/longitud sin procesar también está bien.
  • Si el software insiste en mostrar los resultados como un mapa, también está bien. No necesito mapas muy detallados, basta con un mapa donde se vean nombres de ciudades de más de 100000 habitantes.

Requisitos:

  • Se ejecuta en mi computadora local (puedo instalar cualquier sistema operativo).
  • Fácil de instalar, sin descargar gigas de datos.
  • Libre.
El requisito de prescindir de descargar Gigabytes de datos entra en conflicto con el requisito de "fuera de línea". O lo uno o lo otro.
@DeerHunter: Desafortunadamente, la pregunta a la que se vinculó es solo para EE. UU.
@DeerHunter: solo busco precisión a nivel de ciudad. Una base de datos que contenga las coordenadas de todas las ciudades de más de 100000 habitantes y sus expresiones de coincidencia de direcciones probablemente cabría en 100 MB. Eso sería suficiente.

Respuestas (1)

Esto podría ser posible con la API de OpenStreetMap , con licencia de ODbL .

No lo he usado por un tiempo, pero básicamente defines un rectángulo ( bbox, cuadro delimitador) de dos puntos (S, N, W y E). Dado que el área máxima del cuadro delimitador es limitada, deberá repetir la consulta para partes pequeñas del mundo (donde las áreas con el tamaño de Alemania normalmente están bien).

Luego defines las condiciones de lo que quieres recibir. Para las ciudades, place=citysería tal condición. Desafortunadamente, la categorización de las ciudades puede ser específica del país, por lo que debe leer la documentación y averiguarlo.

Ejemplo de consulta de API para ciudades en Alemania (aproximadamente, ya que tiene un rectángulo):

http://www.overpass-api.de/api/xapi?node[bbox=5.87,47.27,15.04,55.12][place=city]

El resultado es bastante pequeño (155 kB) y contiene información relevante:

<node id="17193023" lat="49.5981208" lon="11.0036532">
    <tag k="ele" v="279"/>
    <tag k="is_in" v="Mittelfranken,Bayern,Bundesrepublik Deutschland,Europe"/>
    <tag k="is_in:country" v="Germany"/>
    <tag k="is_in:country_code" v="DE"/>
    ...
    <tag k="name" v="Erlangen"/>
    <tag k="name:ta" v="எர்லங்கன்"/>
    ...
    <tag k="place" v="city"/>
    <tag k="population" v="105624"/>
    ...
</node>

Esta es una respuesta porque:

  • la precisión a nivel de ciudad está disponible (como se describe arriba)
  • usted puede definir el algoritmo para encontrar ciudades (aunque se necesitan algunos conocimientos de programación)
  • su algoritmo puede manejar ambigüedades
  • en todo el mundo: los datos de OSM son realmente buenos mientras tanto
  • Se admiten nombres de ciudades no latinos, consulte el ejemplo anterior paraname:ta
  • proporciona una salida de longitud/latitud sin procesar (ver lony lat)
  • se ejecuta en su computadora (puede usar cualquier lenguaje de programación que pueda descargar datos a través de HTTP)
  • fácil de instalar: sin instalación, es un servicio web
  • sin descargar gigabytes de datos: pequeña cantidad de datos, vea el ejemplo anterior
  • gratis: ODbL

Lamento que esta respuesta aún necesite programación personalizada, pero teniendo en cuenta la antigüedad de la pregunta y aún no hay respuestas, supongo que su solicitud es muy específica y solo puede resolverse así.