=> Die Abfrage führt IMO im Test im Overpass Turbo zu einem plausiblem Ergebnis, so dass z. B. auch bei vierstelligen PLZs wie “04209” Leipzig oder “01157” Dresden nicht französische, tschechische, etc. Straßen geliefert werden.
==> Allerdings kommen Straßen im Ergebnis mehrfach vor, könnte das auch irgendwie eindeutig abgefragt werden (in SQL wäre das DISTINCT oder GROUP BY)?
Edit:
Durch die Ausgabe von ::id bekommt man die verschiedenen Abschnitte der gleichen Straße. Bei Weglassen fallen die echten (wenigen) Mehrfachvorkommen unter den Tisch.
Mammi71
(One feature, Six mappers and still More ways to map it)
5
Nein!
abgesehen davon, dass dies schon allein von der geografischen Lage zwei verschiedene Abschnitte sind, haben diese auch noch ein unterschiedliches Tagging.
“Dubletten” wären absolut identisch:
gleiche Lage
gleiche Tags
gleiche Zugehörigkeit zu Relationen
Zwei aufeinanderfolgende Straßenabschnitte, die nur Punkt 2 und 3 erfüllen, kann man vereinigen (muss man aber nicht)
Ich möchte jeweils alle Straßen, die innerhalb einer deutschen PLZ vorkommen
leider nicht erreicht. Wir müssten wohl [out:csv(::id, "name",::count; false; ",")];
so modifizieren, dass nur der “name”, nicht die::id berücksichtogt wird …
Mammi71
(One feature, Six mappers and still More ways to map it)
7
Ich habe keine Ahnung, ob man das direkt als Datenbankanfrage hinbekommt.
Wahrscheinlich benötigt es nach der Datenbankabfrage weitere Verarbeitungsschritte, in denen zwei Straßenabschnitte mit identischem Namen, die sich in einem Punkt berühren, zusammengefasst werden, und zwar solange wie sich zwei Straßenabschnitte mit identischem Namen an einem Punkt berühren.
Anmerkung: es müssen nicht unbedingt die Endpunkte sein, wo sie sich berühren. Da funktioniert dann einfaches Verschmelzen auch nicht.
[out:csv(cnt,length,name)];
area["ISO3166-1"="DE"];
wr(area)[postal_code="42287"];
map_to_area;
way(area)[name][highway];
for(t["name"])
{
make stat cnt=count(ways),length=sum(length()),name=_.val;
out;
}
erzeugt pro Straßenname nur eine Zeile.
Das PLZ-Gebiet in DE habe ich in drei Schritten selektiert:
Deutschland als Fläche in Zeile 2
ein PLZ-Element (Way oder Relation) in Zeile 3
die dazugehörige PLZ–Area in Zeile 4
In Zeile 6 fasst das for jeweils alle Elemente zusammen, für die der Ausdruck t["name"] (der Wert des Tags name) den gleichen Wert hat. Die Anweisung for kommt dem GROUP_BY schon so nahe wie das noch sinnvoll ist.
In Zeile 8 habe ich dann ein paar vermutlich interessante Informationen zusammengefassen lassen.
… ich bin beeindruckt! Habe es mal eben getestet, es läuft sehr gut, vielen Dank dafür!
=> In der Tat sind die Zusatz-Infos, die ich gar nicht angefordert hatte, ziemlich interessant: Anzahl der zusammengefassten gleichlautenden Straßen und die Gesamtlänge der Straße.