Overpass: Postleitzahlengebiete einer Stadt

Hallo,

ich würde gerne die Postleitzahlengebiete einer Stadt erfragen. Eine Abfrage nach “Ingolstadt” in Bayern bringt mir z.B.:

und eine area-id von 3600062381.

Frage ich damit nun die boundarys mit postal_code ab:

 node(area:3600062381);
    <;
    relation._["boundary"="postal_code"];
    out;

erhalte ich neben diesen Postleitzahlen auch noch alle umliegenden Postleitzahlen. Wie bekomme ich aber nur die Postleitzahlen, die auch im Node der Stadt stehen? Ich brauche von diesen die Relationen, um damit weiterarbeiten zu können. Ich könnte diese natürlich auch per Hand filtern, würde aber gerne wissen, wo das Problem liegt.

In Österreich funktioniert die Abfrage nach den Postleitzahlen irgendwie gar nicht:

 node(area:3600105619);
    <;
    relation._["boundary"="postal_code"];
    out;

Hier müssten die Postcodes 7132,7143,7161 sein, aber das Ergebnis ist leer.

Okay, mit Österreich hab ich es hinbekommen:

node(area:3600105619);
				<;
				relation._["boundary"="administrative"]["postal_code"];
				out;

Aber auch hier das Problem, dass ich mehr PLZ bekomme, als die Stadt an sich hat…

In A kann eine Stadt mehrere PLZs haben… Das ist schon richtig…

Ja, aber der node der Stadt hat:
85049,85051,85053,85055,85057

und wenn ich über das Area abfrage, kriege ich viel mehr:
85077,85053,85101,85051,85092,85057,85098,85049,85114,85128,85080,85139,85055,85116,85123,86706,86673

Ich würde gerne verstehen, warum :wink: Es sieht ja so aus, als ob die angrenzenden Gebiete auch mit als Ergebnis ausgeliefert werden, nur wie kann ich das abstellen?

Weil der Node der Stadt sich eventuell aus den inneren Bezirken zusammensetzt und die Area die äußeren Bezirke inkludiert…

wuschba:
Kannst du uns mal konkrete Beispiele anhand des PLZ-Layers vom OSM-Inspector liefern? Nutze dort mal die Permalink-Funktion.

In dem PLZ-Layer kann man genau die Lage und den Ortsnamen zu den einzelnen PLZ-Gebieten sehen.

Ich habe die Semantik für “ist in Area” unglücklich gestaltet. Es gilt zur Zeit:

  • Nodes werden zurückgeliefert, wenn sie im Inneren oder auf dem Rand der Area liegen.
  • Ways werden zurückgeliefert, wenn sie einen Punkt im Inneren der Area besitzen oder ein Segment vollständig auf dem Rand liegt. Einzelne Punkte reichen nicht.
  • Relations werden zurückgeliefert, wenn mindestens eines ihrer Member zurückgeliefert werden würde.

Das ist für Nodes und Ways auch die am Meisten gebraucht Semantik: für Ways schließt das genau die Wege ein, die in einer Straßenliste auch auftauchen sollten. Bei den Relations ist die Definition zwar einleuchtend, aber führt zu dem beobachteten Problem: grenzen zwei Postleitzahlenbezirke an der Stadtgrenze aneinander, werden beide aufgenommen, da ihre Grenzlinie ja sogar mit mehreren Segmenten auf dem Rand der Area liegt. Es sind also auch alle angrenzenden Postleitzahlenbezirke enthalten.

Ich denke, dass ich schnellstmöglich eine Version der Overpass API herausbringe, in der die Relationenregel wie folgt geändert ist:

  • Relations werden zurückgeliefert, wenn mindestens eines ihrer Member im Inneren der Area liegt. Auch komplette Segmente von Member-Ways reichen nicht.
    Aber das kann ein paar Wochen dauern, bis diese Version fertig ist.

Entschuldigung für die derzeit etwas unbefriedigende Situation und viele Grüße,

Roland