Wie kann ich eine Form anstelle einer Koordinate geocodieren?

8

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?


quelle

Antworten:

6

Cooles Projekt! Sie können sich MapIt: Global ansehen :

MapIt ist ein Dienst, der geografische Punkte Verwaltungsbereichen zuordnet. Diese Ausgabe basiert auf Quelldaten aus dem absolut erstaunlichen OpenStreetMap- Projekt. Fügen Sie dort Ihre Grenzen hinzu, wenn sie fehlen. Wenn Sie in Großbritannien sind, ist unser MapIt UK mit offenen Ordnance Survey-Daten wahrscheinlich nützlicher.

MapIt ist nützlich für alle, die die Koordinaten eines Punktes auf der Erde haben und herausfinden müssen, in welchem ​​Land, in welcher Region, in welcher Stadt, in welchem ​​Wahlkreis oder in welchem ​​Bundesstaat er liegt. Es ist auch großartig, um die Formen all dieser Grenzen nachzuschlagen.

Die gemeinnützige Nutzung dieses Dienstes mit geringem Volumen ist kostenlos - lesen Sie mehr .

Sie können die Quelle auf Github herunterladen .

Benötigen Sie eine Lizenz? Lesen Sie mehr oder setzen Sie sich mit uns in Verbindung ([email protected]).

blah238
quelle
Das ist ziemlich nah. Ich wünschte, sie würden die Suche nach Zeichenfolgen zulassen. Mit Overpass können wir so ziemlich dasselbe erreichen.
Die Installation des gesamten Systems auf Ihren eigenen Servern, die die einzige Möglichkeit darstellt, die Ergebnisse kommerziell zu nutzen, scheint ein recht komplexer Prozess zu sein, wie unter code.mapit.mysociety.org dokumentiert (bei Verwendung von OSM wird 500 GB freier Speicherplatz empfohlen). Beachten Sie, dass eine der von ihnen verwendeten Quellen, GADM, ebenfalls eine nichtkommerzielle Einschränkung aufweist.
Rob Hoare
Sie haben kommerzielle Lizenzen gemäß global.mapit.mysociety.org/licensing
blah238
1
@ Justin: Hallo, ich bin einer der Entwickler, die an MapIt: Global gearbeitet haben. Ich denke, Sie haben gesehen, dass Sie nach Zeichenfolgenpräfixen suchen können ( Beispiel ). Wenn Sie eine Fuzzy-Suche wünschen, kann ich Ihnen vorschlagen, dies im Issue-Tracker anzufordern . Es ist ein Open-Source-Projekt. Selbst wenn wir keine Zeit haben, daran zu arbeiten, wird es vielleicht ein Freiwilliger tun.
Mark Longair
1
@ MarkLongair Toller Vorschlag. github.com/mysociety/mapit/issues/101
2

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 .

Rob Hoare
quelle
Vielen Dank für den Hinweis, dass es zwei Schritte geben kann. Wenn es eine einfache Möglichkeit gäbe, OSM zum Standardisieren von Namen zu verwenden, könnten wir unser Problem leicht lösen (mit den Grenzen, die OSM zur Verfügung hat).
An diesem Punkt geht es uns nicht sonderlich darum, Qualitätsdaten zu erhalten. Wir brauchen hauptsächlich die großen Verwaltungsbereiche wie Staaten und Länder. Qualitativ hochwertige County-Daten wären nett, aber nicht notwendig.
Auf dieser Ebene ist Natural Earth bis auf adm1 in jedem Land wahrscheinlich die beste Option für den Anfang (die ADM0- und ADM1-Grenzen). Die SHP-Dateien können mit ogr2ogr und anderen ähnlichen Dienstprogrammen in GeoJSON oder verschiedene andere Formate konvertiert werden.
Rob Hoare
Wow, irgendwie habe ich das in deiner Antwort verpasst. Vielen Dank für den erneuten Hinweis.
2

Ihre Nominatim-Abfrage enthält ein place_idFeld 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_levelSchlü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.

scai
quelle