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?