Eine Liste mit allen secondary Strassen in Berlin aus OSM extrahieren?

Hallo OSM Community,

ich würde gerne eine Liste mit allen Secondary bzw. eine Liste mit allen Primary Straßen aus OSM extrahieren.
Diese Liste würde ich gerne mit den Straßen Tags (z.B. Namen) ergänzen und in einem Wiki anzeigen.
Wenn möglich mit ein Group By damit ich nicht die selbe Straße 100 mal in der Liste habe, weil diese gesplittet wurde.

Da sich diese List nicht ständig verändert müsste ich das wohl manuell anstoßen.

##############################################################

Ganz abgesehen davon ob diese Liste Sinn ergibt oder nicht. Oder ob man die Liste bereits irgendwo führt:
Wie würdet Ihr solch etwas umsetzen?

Ich habe vor vielen Jahren in PHP programmiert und kenne mich mit Datenbanken etwas aus.
Allerdings fehlt mir der Ansatz. Wie gehe ich wo vor und mit welchen Tools geht es am besten?
Sollte ich direkt bei Openstreetmap diese Daten ziehen oder vielleicht aus einem Extract z.B. bei Cloudmade oder Geofabrik?

Wäre klasse wenn Ihr mir ein paar Tips und Links geben könntet damit ich loslegen kann.

Hallo,

ich mache mal einen Vorschlag für den Anfang:

von der Geofabrik das entsprechende Extract laden.

Mit Osmosis Berlin mit dem Boundary Poligon ausschneiden.

Mit Osmosis alle Highways secondary filtern lassen.

Für meinen Zweck geht es dann mit Excel/Calc weiter, sprich, Dublikate filtern, sortieren etc. Relativ viel Handarbeit.

Vll reicht das ja als ersten Ansatz. Bei weiteren Fragen oder wenn du Links brauchst, meld dich einfach wieder.

Gruß

z.

bau dir mit osm2pgsql eine Datenbank auf - genauso als ob du eine Karte selber rendern wolltest. als Resultat hast du eine postgresql-DB, die du mit sql abfragen kannt.

hier EINE Anleitung - davon gib es noch mehrere: http://wiki.openstreetmap.org/wiki/Osm2pgsql aber ne bessere finde ich heute Abend nicht auf die Schnelle.
sollte zum Einstieg schon mal reichen.

Gruss
walter

Oder gleich Berlin laden :wink: Hat die Geofabrik netterweise im Angebot

Bedenke bitte, dass gleiche Straßennamen nicht zwingend bedeuten, dass das eine zusammengehörige Straße ist. Innerhalb einer Ortschaft, mag das ja noch gelten, wenn du jedoch auf Landkreisebene oder größer gehst, ist die Wahrscheinlichkeit, dass es Haupt-/Dorfstraßen (um mal zwei sehr häufige Namen zu nehmen) in mehreren Orten gibt, ziemlich groß.

Es ist keineswegs trivial, herauszufinden, welche Straßenteile zusammengehören und welche nicht.
So kann “Group By” bei großen Gebieten ganz schön in die Irre führen.

Edbert (EvanE)

Vielleicht hilft dir das:

perl opaQuery.pl “way [highway=primary] (52.3, 13.0, 52.7, 13.8); out meta;”

Im Ergebnis erhältst du dann sowas:

...
  <way id="15971193" version="15" timestamp="2012-01-15T08:14:00Z" changeset="10395320" uid="66391" user="geozeisig">
    <nd ref="160493838"/>
    <nd ref="160493831"/>
    <tag k="bridge" v="yes"/>
    <tag k="highway" v="primary"/>
    <tag k="layer" v="1"/>
    <tag k="maxspeed" v="50"/>
    <tag k="name" v="Schloßbrücke"/>
    <tag k="oneway" v="yes"/>
    <tag k="postal_code" v="10117"/>
    <tag k="ref" v="B 2;B 5"/>
    <tag k="wikipedia:de" v="Schlossbrücke_(Berlin-Mitte)"/>
  </way>
...

Gruß Klaus

PS: Die Bounding-Box ist recht “großzügig” gewählt.

Um die Verwirrung zu vergrößern, hier noch eine Methode: :slight_smile:

  • Download von berlin.osm.pbf von geofabrik.de
  • Umwandeln ins .o5m-Format mit osmconvert
  • Filtern mit osmfilter --keep=“highway=secondary”
  • Erstellen einer CSV-Tabelle mit osmconvert --csv=“name”
  • Beseitigen von doppelten Zeilen mit sort -u

Ja! Grad in Berlin gibt es unterschiedliche Straßen mit gleichem Namen in unterschiedlichen Stadtteilen - soweit ich mich erinnere…

Vielen Dank für die vielen Vorschläge.
Ich habe natürlich eine ganze Menge getestet mit den vorgeschlagenen Tools Osmosis und OSMConvert.
Das Ergebnis war nicht annähernd zufriedenstellend, da haufenweise Nodes im Resultat aufgetaucht sind und ich diese nicht ausschließen konnte.

Werde es nun mal mit OSMFilter ausprobieren. Gebe dann mal feedback.

prima, dass du voran kommst.
Bitte beachte aber den “harmlosen” Hinweis von Edbert: Strassennamen sind in Berlin definitiv mehrfach vorhanden. Und nicht etwa als Teilstücke einer Strasse sondern es sind verschiedenen Strassen in unterschiedlichen Stadtteilen/Bezirken. Da bekommst du ein grösseres Problem, als du dir das jetzt vorstellen kannst.

Da kommst du eigentlich nur mit geographischen Informationen (welche Koordinaten?, sind die beiden Teilstücke miteinander verbunden? Liegen sie im gleichen Bezirk? u.s.w.) weiter.
Und wenn ich das richtig sehe, schmeisst du diese “lebensnotwendigen” Informationen schon ganz am Anfang raus oder ignorierst sie zumindest.

Gruss
Walter

Beispiel: Die “Friedrichstrasse” gibt es mindestens dreimal in Berlin.

Gruß Klaus

Also ich komme nicht weiter, weil auch osmfilter mir die ganzen Nodes ausgibt.
Und wegen der reichweiten Hilfe von euch will noch ein wenig mehr Licht in mein Vorhaben bringen.

Nehmen Wir an ich möchte eine Liste von allen als Highway=motorway definierten Straßen in Berlin/Brandenburg erfassen.
Als Ausgabe möchte ich jede Straße nur einmalig in der Ausgabe haben. In Berlin/Brandenburg wäre das eine Liste die in etwa so aussieht:

REF
A113
A115
A100
A10
A11
A12
A13

Natürlich wären der ref_name (z.B. von A100 reg_name: Berliner Stadtring) sehr interessant. Aber kein muss.
Hört sich einfach an. Aber die Ausgabe in der CSV Datei ist voll mit Nodes, die ich eigentlich ausgeschlossen habe.

Ich werde das selbe auch für als Primary definierte Straßen benötigen. Aber erstmal mit etwas einfachem starten.

Eine CSV Datei kriege ich dank eurer Unterstützung bereits ohne Problem hin.

ein wenig mehr Licht wäre schon besser: Wie machst du ganz genau welche Abfrage mit welcher Software und wie sieht dann das Ergebnis aus?
Wir - zumindest ich- tappen hier noch mächtig im Dunkeln.

Ausser der Vermutung, dass du es eventuell mit osmfilter machst, ham 'mer garnix.

Gruss
walter

Ein Weg wird durch eine geordnete Liste seiner Knoten definiert.
Wenn du also Wege willst, brauchst du deren Knoten. Ohne die Knoten gibt es keine Lokalisierung!

Wenn du nur die Namen und ggfs. die Referenznummer von Wegen willst, sieht das anders aus.
Aber wie gesagt, ohne die Knoten gibt es keine Koordinaten und ein Weg ohne Kenntniss der Knoten (inklusive der Koordinaten) ist kein sinnvoll weiter bearbeitbares Geo-Objekt mehr.

Da die Programme osmconvert und osmfilter mit Geo-Objekten arbeiten, kannst du mit denen die Knoten der Wege nicht loswerden. Das musst du notfalls mit einen Zeilen-Editor als Nachbearbeitung erledigen.

Edbert (EvanE)

Moin,

vielleicht probieren wir es mal so:

osm=# select distinct tags->'name' as strasse from ways where tags->'highway'='secondary' and tags->'name' like 'Y%';
         strasse
----------------------
 Yorckstraße
 Yitzhak-Rabin-Straße
 Yorckplatz
 Ysenburgstraße
 Ysenburger Straße
 York-Ring
(6 rows)

osm=#

Ich hab mal nur die mit Y* genommen, sonst werden das so viele :wink:

Meinst Du sowas?

LG,

-moenk

womit wir wieder bei meiner ersten Antwort wären: http://forum.openstreetmap.org/viewtopic.php?pid=260431#p260431

sql kann willy ja, lesen wohl nicht :frowning:

dennoch Danke, Moenk

p.s. das Doppelgängerproblem scheint ja nicht soooo wichtig zu sein.

Hallo!

Falls es noch nicht geklappt hat, der Weg funktioniert:

wget download.geofabrik.de/osm/europe/germany/berlin.osm.pbf -O berlin.pbf

./osmconvert berlin.pbf -o=berlin.o5m

./osmconvert berlin.pbf --all-to-nodes -o=berlin_nodes.o5m

./osmfilter berlin_nodes.o5m --keep="highway=secondary" -o=berlin_secondary.o5m

./osmconvert berlin_secondary.o5m --csv="name" -o=berlin_secondary.csv

sort -u berlin_secondary.csv >berlin_secondary_sorted.csv

Natürlich besteht dabei das Problem mit Namen, die mehrfach in unterschiedlichen Stadtteilen vorkommen. Diese Namen erscheinen jeweils nur einmal in der Liste. Um das in den Griff zu kriegen, müsste man die Koordinaten mit ausgeben und dann entsprechend behandeln. Dazu müsste --csv=“name” erweitert werden: --csv=“name @lon @lat

Falls Linux verwendet wird, lassen sich einige der Kommandos verbinden, so dass nicht so viele Einzelschritte notwendig sind. Im Prinzip ist das aber egal, da die Verarbeitungszeit insgesamt auch nur bei wenigen Sekunden liegt.

Grüße
Markus

Entschuldigt das ich erst jetzt antworte…

@Marqqs: Dein Batch ist GENAU was ich machen wollte. Das Ergebnis ist super! Danke!
Zwar funktioniert die SORT Funktion auf Windows nicht, aber damit kann ich leben.

Es wäre toll wenn mir jemand folgende Zeilen etwas erklären könnte, damit meine Wissenslücken geschlossen werden:


./osmconvert berlin.pbf -o=berlin.o5m

./osmconvert berlin.pbf --all-to-nodes -o=berlin_nodes.o5m

Warum konvertierst Du in das o5m Format und in der zweiten Zeile gleich danach noch einmal?
Was ganz genau macht der Parameter “–all-to-nodes”?

Vielen Dank nochmal für die ausführliche Hilfe soweit.
Hatte schon etwas bange das solch eine Frage hier nichts zu suchen hätte…

-u weglassen, also sort datei > datei.sorted


osmconvert -h 
--all-to-nodes            convert ways and relations to nodes

Dabei werden aus FlächenPOIs NodePOIs generiert.

Chris

Hallo Willy,
freut mich, dass es klappt!

Gute Frage. :slight_smile: Wahrscheinlich gingen das Umwandeln in das andere Format und das Umwandeln in Knoten auch in einer Zeile, aber ich wollte das Beispiel bewusst nicht verkomplizieren und hab es in Einzelschritten hingeschrieben. Unter Linux kann man den kompletten Vorgang wahrscheinlich in zwei Zeilen zusammenfassen.

Das ist am besten hier beschrieben, glaub ich:

https://wiki.openstreetmap.org/wiki/DE:Osmconvert#Wege_und_Relationen_entfernen_und_in_Knoten_umwandeln

Hüstl sicher?