maperitive trennt ways

Hallo zusammen,

vielleicht nicht ganz das richtige Unterforum, aber ich frag mal lieber auf deutsch…

Ich habe mir einen Teil des deutschen Autobahnnetzes mit overpass heruntergeladen, in maperitve importiert und mit Hilfe eines minamalen rulesets gerendert und dann nach SVG exportiert.

Die entstehenden Pfade sind immer wieder unterbrochen, und zwar wenn sich bestimmte Eigenschaften im Verlauf der Autobahn ändern. Wenn ein way z.b. zusätzlich

<tag k="bridge" v="yes"/>

enthält wird der Pfad entsprechend aufgeteilt. Entferne ich mit einem Texteditor diese Tags aus der OSM-Datei entsteht anschließend ein durchgehender Pfad.

Leider sind das nicht die einzigen Tags die solche Pfadunterbrechungen verursachen.

Kann man das ohne manuelle Manipulation der OSM-Datei lösen?

Die overpass-Abfrage lautet:

[out:xml]
[bbox:{{bbox}}];
way["highway"="motorway"];
(._;>;);
out;

Das minimale maperitive-Ruleset:

features
	lines
		Autobahn : highway=motorway

rules
	target : Autobahn
		define
			line-color : #ff00be
			line-width : 1
		draw : line

http://overpass-turbo.eu/s/XcT

Autobahnen in DE sind eigentlich im network=BAB
Vielleicht hilft es …

Ich habe Deine Abfrage getestet:

[out:json][timeout:25];
(
  rel["network"="BAB"]({{bbox}});
);
out body;
>;
out skel qt;

Der entscheidende Punkt ist der Parameter “skel” in

out skel qt;

der bewirkt, dass nur Geometrie-Daten und IDs exportiert werden. Damit erhalte ich die gewünschten durchgehende Pfade (verliere aber auch die Information “highway”=“motorway” und alle anderen). Vielleicht kann ich mir auf diesem Weg trotzdem einen praktikablen Workflow zimmern.

Danke für den Denkanstoß!

PS: Wenn man das “skel” wegläßt, verhält sich das Ergebnis deiner Abfrage übrigens genau wie das Ergebnis von meiner. Ob man über eine relation sucht, spielt keine Rolle, am Ende kommen und raus.

mal so nebenbei gefragt, wieso gibt es eigentlich eine Relation mit allen deutschen Autobahnen? Reicht das network=BAB auf den ways nicht?

darf man fragen, um welche bbox es geht? Ich kann das Problem nicht nachvollziehen.

  • Ich glaube auch dass das Problem wo ganz anders ist; entsprechende Brücken (etc.) sind einfach nicht in der Relation, weil es jemand vergessen oder kaputtgemacht hat.

das ist ja auch genau der Grund warum diese Art Relationen nichts bringen. Einfach highway=motorway und ggf. motorway_link und man sollte doch das komplette Autobahnnetz bekommen, oder?

Weil Sammelrelationen zwar unerwünscht, aber noch nicht verboten sind. :wink:

vielleicht habe ich es ja auch nicht richtig interpretiert, weil es wird vermutlich für jede Autobahn (A1, A2 etc.) eine route Relation geben (bzw. 3: je Richtung und eine route-Master), vermutlich mit network=Bundesautobahn (nachrichtlich: gibt es nicht, dafür gibt es die Abkürzung BAB). Damit würde die og. Overpass Abfrage auch bereits alle Autobahnen in Deutschland finden ohne dass man die Grenzen berücksichtigen müsste.
Zusätzlich noch eine Sammelrelation bringt praktisch nur Nachteile.

Hallo cul-de-sac,

um zu deiner ursprünglichen Frage zurückzukehren: MapillaryMaperitive trennt die Ways nicht, die Ways sind schon getrennt. Es gibt im OSM-Datenmodell nämlich keine Möglichkeit anzugeben, dass bestimmte Eigenschaftne nur auf einer Teilstrecke gelten. Um die Ways zu vereinigen, müsstest du die OSM-Daten lokal (auf keinen Fall in der OSM-Datenbank!) “manipulieren”, sprich die Ways vereinigen. Soweit ich weiß, gibt es dafür keine fertige Software; du müsstest sie erst programmieren.

Wenn du mit Mapnik, Mapserver oder einer Vektortile-Toolchain arbeiten würdest, die ihre Daten aus einer PostgreSQL-Datenbank (mit PostGIS-Erweiterung) bezieht [1], könntest du die SQL-Abfragen so umformulieren, dass Straßensegmente im aktuellen Kartenausschnitt mit gleicher Straßenklasse, Name und Nummer (also highway, ref, name) vereinigt werden. Die Qualität der Beschriftung profitiert davon. Das habe ich für einen Teil oder alle Kartengrafiken im Programmheft der State of the Map 2019 in Heidelberg gemacht.

Viele Grüße

Michael

[1] Import der OSM-Daten in die lokale PostgreSQL-Datenbank je nach Kartenstil mit Osm2pgsql oder Imposm.

EDIT: Korrektur, natürlich meinte ich Maperitive, nicht Mapillary, ich Depp.

Hi cul-de-sac,
Auch mal um zur Ausgangsfrage zurückzukehren: maperitive fasst selbständig beim Rendern alle Wegsegmente mit identischen Attributen zu einem Weg zusammen (siehe auch https://groups.google.com/forum/#!searchin/maperitive/label%7Csort:date/maperitive/OP1YARxC3dU/BkcNv-xhBQAJ “…Maperitive combine lines with the same criteria and then puts one text label on each…”). Wege mit unterschiedlichen Attributen sind in den OSM-Daten bereits getrennt und bleiben es auch in maperitive. Das kannst Du in maperitive nicht beeinflussen.

Nein

Grüße
Andreas

Edit: Bemerkung für Wege mit unterschiedlichen Attributen hinzugefügt

Hallo Michael und Andreas,

danke für die konkreten Antworten, die mir mehr Klarheit verschafft haben. Ich werde mir im ersten Schritt ein Editor-Makro schreiben, das per Search and replace die entsprechenden Tags entfernt. Dann fasst maperitve wie Andreas beschrieben hat, die Wegsegmente zusammen. Im zweiten Schritt wird es wohl ein Skript werden.

Grüße
cul-de-sac