Kostenlose Offline-Geokodierung

Ich habe eine Liste mit 2000 Adressen wie diese:

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

Und ich möchte sie auf einer Karte anzeigen, ohne diese Adressen über das Internet zu senden .

Adressen geokodieren:

  • Die Genauigkeit auf Stadtebene ist in Ordnung.
  • Einige Adressen (wie die vierte oben) enthalten viele Details, sie können übersprungen werden, aber es kann für einen Algorithmus schwierig sein, zu finden, was sicher übersprungen werden kann.
  • Viele Adressen haben nicht den Ländernamen. Beachten Sie, dass Google Maps diese problemlos findet, daher gibt es normalerweise keine Mehrdeutigkeiten.
  • Orte auf der ganzen Welt.
  • Einige der Adressen verwenden nicht-lateinische Schriften. Bonus auch für die Geokodierung.

Ausgabeformat:

  • .osm// Dateiausgabe ist in Ordnung .obf..kml
  • Die rohe Breiten-/Längengradausgabe ist auch in Ordnung.
  • Wenn die Software darauf besteht, Ergebnisse als Karte anzuzeigen, ist das auch in Ordnung. Ich brauche keine sehr detaillierten Karten, eine Karte, auf der Namen von Städten mit mehr als 100000 Einwohnern sichtbar sind, reicht aus.

Anforderungen:

  • Läuft auf meinem lokalen Computer (ich kann jedes Betriebssystem installieren).
  • Einfach zu installieren, ohne Gigabyte an Daten herunterzuladen.
  • Frei.
Die Anforderung, auf das Herunterladen von Gigabyte an Daten zu verzichten, steht im Widerspruch zur „Offline“-Anforderung. Entweder das eine oder das andere.
@DeerHunter: Die Frage, auf die Sie verlinkt haben, gilt leider nur für die USA.
@DeerHunter: Ich suche nur nach Präzision auf Stadtebene. Eine Datenbank, die die Koordinaten aller Städte mit mehr als 100.000 Einwohnern und ihre Adressenabgleichsausdrücke enthält, würde wahrscheinlich in 100 MB passen. Das würde reichen.

Antworten (1)

Dies könnte mit der unter ODbL lizenzierten OpenStreetMap-API möglich sein .

Ich habe es eine Weile nicht benutzt, aber im Grunde definieren Sie ein Rechteck ( bbox, Begrenzungsrahmen) aus zwei Punkten (S, N, W und E). Da der maximale Bereich des Begrenzungsrahmens begrenzt ist, müssten Sie die Abfrage für kleine Teile der Welt wiederholen (wo Bereiche mit der Größe von Deutschland normalerweise in Ordnung sind).

Dann definieren Sie die Bedingungen für das, was Sie erhalten möchten. Für Städte place=citywäre das eine solche Bedingung. Leider kann die Kategorisierung von Städten länderspezifisch sein, also müssen Sie die Dokumentation lesen und herausfinden.

Beispiel-API-Abfrage für Städte in Deutschland (grob, da rechteckig):

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

Das Ergebnis ist ziemlich klein (155 kB) und enthält relevante Informationen:

<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>

Dies ist eine Antwort, weil:

  • Genauigkeit auf Stadtebene ist verfügbar (wie oben beschrieben)
  • der Algorithmus zum Finden von Städten kann von Ihnen definiert werden (einige Programmierkenntnisse sind jedoch erforderlich)
  • Ihr Algorithmus kann mit Mehrdeutigkeiten umgehen
  • weltweit: OSM-Daten sind wirklich gut geworden
  • nicht-lateinische Städtenamen werden unterstützt, siehe Beispiel oben fürname:ta
  • es liefert eine rohe Längen-/Breiten-Ausgabe (siehe lonund lat)
  • läuft auf Ihrem Computer (Sie können jede Programmiersprache verwenden, die Daten über HTTP herunterladen kann)
  • einfach zu installieren: keine Installation, es ist ein Webservice
  • ohne Herunterladen von Gigabyte Daten: kleine Datenmenge, siehe Beispiel oben
  • frei: ODbL

Es tut mir leid, dass für diese Antwort noch eine benutzerdefinierte Programmierung erforderlich ist, aber angesichts des Alters der Frage und der noch fehlenden Antworten denke ich, dass Ihre Anfrage sehr spezifisch ist und nur so gelöst werden kann.