mapgen.pl

hi,

habe eben mal die erste richtig brauchbare version meines neuen
renderers online gestellt:

http://wiki.openstreetmap.org/wiki/Mapgen.pl

viel spaß, wen’s interessiert…

feedback welcome!

cheers

gerhard

Sehr interessant. Auch schön um eine Karte in .pdf format su sehen. Wass pdf nicht alles vermag…

Was ich vermisse is ein Beispliel karte in .svg format. Bitte stelle eine dazu. (Media:Mapgen004hofheim.svg). Eine svg kan gleich durch Firefox angezeigt werden?

Leider erzählst du nich wie eine style file aus zu sehen hat. Was und wie alles in ein style kan/muss. Bitte stelle auch ein Beispiel style file dabei. z.B von der gezeigte Karte.

Mit OO meinst du wohl Open Office. Inkscape: noch nie von gehört…

Reicht mapgen.pl oder muss mann auch die andere source files installieren?

Sehr interessant!

hi,

ok, svg kommt. sollte hochladbar sein. heute abend. spätestens.

manche browser, je nach plugins, können svg, ja.

style file ist unten auf der wiki seite - in zwei formaten. ods und csv. ods ist zur besseren pflege, der csv export wird dann von mapgen verarbeitet.

du benötigst u.a. verschiedene perl module und mapgen.pl

  • osm.pm
  • mapgen.pm (beide in unterverzeichnis OSM!)

das kommt ein wenig drauf an, welche perl distri du hast…

ciao

gerhard

Erfahrungen mit mapgen004Hofheim.svg (danke)
– Firefox 3.5.7 komt mit scrollbars womit die ganze Karte zu verschieben/zu sehen ist. Ich fand keine Möchlichkeit zum Skalieren/Ein/Auszoomen. Ich weiss nicht was für plugin er benutzt. Gibt es ein plugin oder is svg fest eingebout?
– Internet Explorer 6.0… Keine scrollbalken. Mann kann die Karte nicht verschieben. Aber in Kontekstmenu gibt es Ein/Auszoomen womit mann alles von der Karte erreichen kann.

Oh was sieht dies alles schön aus. Ein Klasse Project!

@greencaps: Inkscape ist ein Vektorgrafikprogramm. Es kann zum Konvertieren von Grafiken auch ohne Benutzeroberfläche gestartet werden und wahrscheinlich tut mapgen.pl genau dieses.
Zoomen im Firefox bei SVG geht übrigens gleich wie für HTML. Also Strg+Mausrad, Strg+Plus/Minus oder Zoom im Menü wählen.

Zu SVG in Browsern. Dieses kann ohne Plugins angezeigt werden in:

  • Opera
  • Gecko (beinhaltet unter anderem Firefox)
  • WebKit (beinhaltet unter anderem Chrome, Konqueror, Safari)
    Die genannten Render unterstützen jeweils nur Teile von SVG.

SVG kann in Trident (beinhaltet unter anderem Internet Explorer) nicht angezeigt werden. Hier muss per Plugin nachgeholfen werden.

@Augustus Kling: Vielen Dank.

bei mir läuft mapgen.pl nicht. Ich nutze Windows XP. Ich kriege immer diese Fehlermeldung:

Can’t find ‘boot_Compress__Bzip2’ symbol in C:/Perl/lib/auto/Compress/Bzip2/Bzip2.dll at OSM/osm.pm line 158

Ich habe auch die Bzip2.dll mal durch ne neuer ersetzt, was auch nix gebracht hat. Hat jemand ne Idee wo das Problem liegt?

hi,

mal eine datei ohne komprimierung nutzen. ansonsten kann man zur not auch in osm.pm die bz2 relevanten zeilen entfernen.

siehe source:

use Compress::Bzip2 ; # install packet “libcompress-bzip2-perl”
# if you have problems with this module/library then just comment out all lines using these functions
# and don’t use zipped files

if ($isBz2) {
	$bz = bzopen($fileName, "rb") or die "Cannot open $fileName: $bzerrno\n" ;

if ($isBz2) {
	$bz->bzreadline($line) ;

good luck!

PS: einfach virtualbox installieren, linux drauf!

ciao

gerhard

ok, jetzt läufts. Vielen Dank!

ich habe gerade versucht eine Autobahn so zu rendern, dass das ganze einen Rand hat. Im Prinzip soll eine farbige Linie oberhalb einer schwarzen breiteren Linie liegen. Also hab ich einfach nochmal eine Zeile highway motorway black eingefügt die breiter ist als die farbige Linie. Ich hab das in der Tabelle mal vor die andere Linie, mal dahinter gestellt. Seltsamerweise liegt in der SVG-Datei die dicke schwarze Linie immer oberhalb der dünneren. Kann man die Renderreihenfolge irgendwie beeinflussen? Außerdem werden beide Linien doppelt gerändert, also insgesamt sind dann vier Linien aufeinander.

hi.

das mit den rändern (beim rendern - haha) hatte ich mal angedacht, es dann aber wieder verworfen. weil: das sieht auf kreuzungen unschön aus, wenn man dann nur einfach die wege übereinandermalt und die außenlinien nicht unterbricht - was sicherlich kompliziert zu implementieren ist…

zur reihenfolge: erst kommen areas, dann wege und punkte (und kleinere flächen wie häuser), dann legende und grid. innerhalb der wege ist es so, dass der layer eine rolle spielt, aber auch die dicke der linien. der gedanke dahinter ist der, dass größere straßen nicht durch kleinere “unterbrochen” werden sollen. daher werden dünne zuerst, dickere danach gezeicnet.

warum jeder weg 4fach gezeichnet werden soll, kann ich nicht sagen, aber evtl sind es 2x2? hin und rückrichtung (deiner autobahnen) und dann deine zwei regeln jeweils?

ciao

gerhard

die Außenlinien braucht man eigentlich nicht unterbrechen. Wenn ich es nachträglich manuell in Inkscape so mache sieht es gut aus. Die Außenlinien sind an der Kreuzung automatisch optisch unterbrochen wenn die schmalere linie auf der dicken liegt. Man könnte es so machen, dass wenn bei zwei Einträgen in der Tabelle “Section” und “ways” gleich sind, dass dann die dünne Linie über der dicken gezeichnet wird. Ansonsten macht deine Reihenfolge ja schon Sinn so wie sie ist.
Wäre es eigentlich auch möglich beim Schreiben der SVG gleich verschiedene Objekte in verschiedene Ebenen in Inkscape zu legen? Das wär ziemlich cool.

ich glaube, der trick ist, erst ALLE untenliegenden breiteren “flächen” unter den linien zu zeichnen und dann erst alle linien. werde es mal probieren und ggf. einbauen, wenn es denn so einfach sein sollte…

das mit den ebenen ist so eine sache. ich weiß nicht genau, wie es geht. ich gruppiere alle gleichen elemente mit <g…

aber inkscape erkennt das nicht als ebene…

Ich hab mal ne Testdatei in Inkscape erstellt um zu sehen, wie das da aussieht mit den Layern. Ich hab einfach einen Kreis auf “Ebene 1” gezeichnet und ein Rechteck auf “Ebene 2”. Es sieht so aus als wird bei den ebenen innerhalb des ‘<g’-Tags ‘id=“layerXY”’ hinzugefügt. Hier der Ausschnitt aus dem XML code der Inkscape Datei:






Wenn es jetzt gelingen würde die unterschiedlichen Objekte in der Karte (also alles wofür es bei den Map Features einen eigenen Begriff/Value gibt) auf unterschiedlichen Ebenen abzulegen, dann wäre die Nachbearbeitung in Inkscape relativ leicht. Das wäre dann praktisch ein WYSIWYG Editor für den Kartenstil. Nur mit dem Nachteil, dass man den Stil nicht als Rules datei exportieren kann.
Das is bestimmt nicht ganz leicht zu implementieren, aber wenn du’s schaffst wirst du berühmt ;). Ich bin mit Perl nicht so vertraut aber ich werd mir deinen Sourcecode mal anschauen in den nächsten Tagen. Vielleicht steig ich da durch und hab ne Idee wie man’s machen könnte.

Hallo chris,

Das sollte nicht das Problem sein, kommt aber drauf an, wie man rendert (ich weiß noch nicht, was Gary nutzt).
Typ 1: Alle Wege/Punkte werden der Reihe nach durchgegangen und ihren Attributen nach gerendert.
Typ 2: Für jeden Style werden alle Wege herausgesucht, die die entsprechenden Tags haben und dann gerendert.
Letzeres dauert wesentlich länger, aber würde deine Idee ganz einfach machen.

Was für eine Rules-Datei?
Man kann in SVG Symbole anlegen und “klonen” (referenzieren), und man kann auch CSS-Styles definieren. Inkscape kann interne Styles zwar noch nicht verwalten, aber zumindest vernünfitg anzeigen. Symbole können (ich weiß nicht ob in Inkscape auch, aber zumindest in Batik) auch aus einer externen Datei kommen, ebenso wie die Stylesheets.
Wenn man also in der CSS-Definition quasi für jede Ebene eine Klasse/Id anlegt, mit der sie gerendert werden soll, kann man das noch bearbeiten. Oder aber eben pro Ebene (die ja einen Typ darstellt) ein style-Tag auf die Gruppe setzen.

Für nachträglichen Nachbearbeiten einer Karte (vor allem für Straßen) empfiehlt sich eine Ebene pro Linientyp (highway=residential, highway=primary, …) ohne spezielle Styles in den Hintergrund zu legen. Diese Ebene kann man dann klonen (use-Element) und in Inkscape für die Bearbeitung sperren (Rechtsklick-Objekteigenschaften-Sperren). Dann kann man bei einem Klick auf die Linie mit dem Pfad-Werkzeug den Ursprungspfad für die Kartendarstellung verändern (da die darüberliegenden gesperrt sind) und die Klone ändern sich automatisch mit.
Zumindest händisch habe ich das schonmal so gemacht, und es funktioniert.

EDIT: Das XML-Attribut für ein gesperrtes Objekt ist: sodipodi:insensitive=true

Grüße,
Malte

Ich dachte bei der rules datei an eine XML-Datei wie sie z.B. Osmarender verwendet. So könnte man neue Karten gleich im gewünschten Stil rendern. Aber wahrscheinlich gehts auch einfach in Inkscape über CSS.

hi!

ich werde am wochenende mal mit den zusätzlichen anscheinend von inkscape benötigten group parametern experimentieren. wenn das funktioniert, baue ich die tags ein.

den oben geschilderten weg eines wysiwyg outputs für inkscape werde ich erst mal nicht gehen. denn: wenn man etwas editieren möchte, dann doch bitte in dem style file von mapgen. die layer geschichte ist schon so komplex genug. es reicht nämlich nicht, alle bundesstraßen in eine ebene zu legen. manche sind nämlich brücken, andere tunnel! und die brücken- und tunnel-grafik-elemente sind wieder auf einer anderen ebene!

zu weiteren style möglichkeiten: schriftart, -größe und offset werde ich demnächst noch implementieren.

ciao

gerhard

Hallo Garry

konnte es leider noch nicht selbst bei mir zum Laufen bringen aber ich habe da eine Frage: in den Beispielen auf der Wikiseite stehen Straßenanmen auf dem Kopf? Machst du etwas in die Richtung?

das mit den auf dem kopf stehenden namen wird mit version 6 erledigt sein. was einem so alles auffällt…