Geokodierung zu einer Form anstelle eines Punktes
Das Projekt, an dem ich gerade arbeite, ist Find-A-Record . Wir geokodieren genealogische Datensatzsammlungen und speichern sie in einem räumlichen Index (durchsuchen Sie unseren Blog, wenn Sie mehr wissen möchten). Suchen basieren auf einer Form. Wir geben Sammlungen zurück, die sich überschneiden oder im Suchbereich enthalten sind.
In den frühen Entwicklungsstadien haben wir Geonamen verwendet, um Sammlungen bis zu einem gewissen Punkt zu geocodieren. Dies eignet sich gut für Sammlungen, die mit niedrigeren Verwaltungsebenen verbunden sind, z. B. Städte und Dörfer. Es bricht jedoch wirklich zusammen, wenn Sie die Ebene von Landkreis, Bundesstaat und Land erhalten.
Die US-Volkszählung von 1940 ist mit den Vereinigten Staaten verbunden und würde einen Punkt in Nord-Kansas erhalten. Alle Anfragen innerhalb der USA, die sich nicht in der Nähe dieses Punktes befinden, geben die US-Volkszählung von 1940 nicht zurück.
Um dies zu lösen, müssen wir Sammlungen mit einer Form anstelle eines Punkts geocodieren.
OSM
OpenStreetMaps verfügt über die Daten, die wir benötigen, ist jedoch äußerst schwierig zu extrahieren. Die Verwaltungshierarchie wird nicht explizit gespeichert. Nominatim wird verwendet, um dieses Problem für OSM zu lösen. Eine Nominatim-Suche gibt nur Funktionen zurück. Eine Abfrage nach Knighton on Teme gibt also zwei Bushaltestellen zurück, jedoch nicht die administrative Grenzbeziehung.
Die Overpass-API sah vielversprechend aus, kann jedoch keine Fuzzy-String-Übereinstimmungen durchführen. Überführung kann nur exakte oder Regex-Übereinstimmungen durchführen. Wir könnten Overpass verwenden, wenn es eine einfache Möglichkeit gäbe, Ortsnamen zu standardisieren. Mit anderen Worten, wenn OSM uns eine Möglichkeit bietet, "Knighton on Teme, Worcestershire, England" gemäß der OSM-Hierarchie auf "Knighton on Teme CP, Malvern Hills, Worcestershire, West Midlands, England, Vereinigtes Königreich" zu standardisieren, dann Fuzzy-String Matching wäre nicht nötig.
Zusammenfassung
Was wir brauchen, ist ein Dienst, mit dem wir Fuzzy-String-Suchen nach einem Ort (oder einer Verwaltungsebene) durchführen und dessen Grenzen abrufen können.
Wir sind uns bewusst, dass es schwierig sein wird, Grenzdaten für die ganze Welt zu erhalten. Zum Glück werden wir es wahrscheinlich nicht so schnell brauchen. Wir brauchen nur Daten für Gebiete auf der Welt, in denen genealogische Aufzeichnungen existieren und Ahnenforscher forschen.
Es sieht so aus, als müssten wir unseren eigenen Service erstellen, der OSM so indiziert, dass wir nach administrativen Grenzen fragen können. Aber wir würden es wirklich lieber nicht tun. Gibt es eine andere Möglichkeit, diese Daten mit vorhandenen Diensten abzurufen?
Ich arbeite derzeit auch mit globalen Ortsnamen und Grenzdaten (einschließlich historischer Daten), damit ich verstehe, was Sie durchmachen!
Ich denke jedoch, dass Ihr Problem wirklich zwei Schritte umfasst: 1. Verwenden Sie eine Fuzzy-Namenssuche, um den Namen eines Administrationsbereichs in einen Standard zu verwandeln, und 2. suchen Sie dann die Grenzen dieses Ortes in Datenbanken mit Grenzen. Anstatt zu versuchen, Daten zu finden, die auch eine unscharfe Suche haben.
WeRelate Places kann bei Schritt 1 für alte Ortsnamen hilfreich sein, und viele andere Geocodierer, wie Sie sie bereits verwenden, können moderne Namen standardisieren.
Schritt 2 ist derzeit sehr schwierig, da viele der geeigneten Grenzdaten unter einer nichtkommerziellen Lizenz (oder noch schlimmer) stehen, insbesondere für historische Daten. Ein Ausgangspunkt für Länder und Administrator-1-Ebenen ist Natural Earth .
Dann gibt es nationale Quellen für niedrigere Verwaltungsbereiche, die aus offenen Regierungsdaten wie USGeoJSON und uk-atlas extrahiert werden . Nichts, was mir bekannt ist, ist wirklich global.
Achten Sie darauf, die Herkunft der Daten und die Lizenz zu verfolgen. Eine nichtkommerzielle Einschränkung ist sehr häufig, z. B. für GADM , Vision of Britain und (US) Atlas of Historical County Boundaries .
quelle
Ihre Nominatim-Abfrage enthält ein
place_id
Feld mit dem Wert 4828147 in Ihrem Beispiel. Dieses Feld dient als interne Kennung für Nominatim (daher ist es nicht global eindeutig). Es kann jedoch verwendet werden, um die interne Adresshierarchie von Nominatim für diesen Ort anzuzeigen . Diese Hierarchie enthält auch Grenzbeziehungen , zum Beispiel die Beziehung 1875245 und mehrere andere.Wenn Sie diese Liste durchgehen und den
admin_level
Schlüssel betrachten, sollte es möglich sein, die gesuchte Beziehung zu finden. Leider scheint diese spezielle Seite noch nicht über eine API verfügbar zu sein.quelle