Hallo zusammen,
ich bin auf der Suche nach einem Weg, die PLZ von Gemeinden aus der Datenbank auszulesen. Ich möchte (falls möglich automatisiert) eine Liste Gemeinden anhand ihres Schlüssels in eine Abfrage stecken und eine Liste aller PLZ erhalten, deren Gebiet die jeweilige Gemeinde überschneidet. Leider kenne ich mich bisher kaum mit Overpass API aus.
Kann mir jemand sagen, ob solch eine Abfrage machbar ist?
Prinzipiell geht das ja schonmal in die richtige Richtung.
Blöd, dass der area Filter die relations nicht erfasst, wenn sie nur Elemente auf dem Rand der area haben. Da muss es doch irgendeine Lösung für geben?
Kann ich die Area auch über den Gemeindeschlüssel definieren? geocodeArea akzeptiert ja nur den Namen der Gemeinde oder? Und der ist ja leider nicht immer eindeutig…
Das ist doch alles Gefrickel. Gibt es in Overpass also kein vernünftiges Intersection-Konzept? Dann doch besser PostGIS. Ist aber natürlich auch nicht so einfach…
[out:json][timeout:300];
// Area für Merchweiler in .a1 merken
area["boundary"="administrative"]["de:amtlicher_gemeindeschluessel"="10043113"]->.a1;
// Area in .a1 umwandeln in eine Relation und dafür die Wege/ Knoten ermitteln
// Ergebnis in .n1 merken. In .n1 sind nun alle Wege/Knoten, die den
// Rand der boundary=administrative Relation beschreiben
rel(pivot.a1); > -> .n1;
// Für die Area .a1 (Merchweiler) alle Knoten ermitteln, die einen Tag haben
// Annahme: es gibt mindestens einen Knoten in der Area
// Ergebnis in .n2 merken. Knoten, die den Rand der Area beschreiben
// sind dort noch enthalten
node[~"."~"."](area.a1) -> .n2;
//Randknoten rauswerfen
(.n2; - .n1;);
//Alle Areas ermitteln, in denen innere Knoten in Merchweiler vorkommen
is_in;
//Filtern auf Areas mit boundary=postal_code
area._["boundary"="postal_code"];
//Area wieder in eine Relation umwandeln
rel(pivot);
//und ausgeben
out geom;
Wenn man davon ausgeht, dass diese Daten in der OSM Datenbank noch aktuell sind, könnte man doch über diese nodes leicht an die PLZ kommen. Ich habe mal stichprobenartig 15 Gemeinden quer durch Deutschland überprüft und die Daten sind sowohl vorhanden als auch korrekt.
Wie würde ich denn nun vorgehen, wenn ich sagen wir die PLZ aller ~11000 Gemeinden abfragen möchte? Gibt es eine Möglichkeit, mit der Overpass API eine Liste aller Gemeindeschlüssel zu importieren und dann beispielsweise über eine for-Schleife alle Gemeinden abzuarbeiten?
<mode=“Advocatus diaboli”>
Die — rechnet man seine Arbeitszeit mit — kostengünstigste Lösung ist, bei Postdirekt die CD “DATAFACTORY BASIC” zu bestellen, die Daten in eine MySQL/PostgreSQL/YouNameItSQL-DB einzuspielen und darauf Selects loszulassen.
Also für ganz DE wird dir Roland sicher früher oder später auf die Finger hauen (->lese: eigene Instanz aufbauen!!), aber für’s Saarland kann man das schon noch laufen lassen: