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.
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.
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.
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.
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.
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.
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
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.
@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:
Gute Frage. 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.