Nach Hause

Neuigkeiten

Kartenverzeichnis

Karten­aus­schnitte

Wandern

Anders Wandern

Draußensein

Kartographie

Themen

Karten bestellen

Links

Kontakt

Redaktion

• Fernwanderwege (Übersicht)

• Die 300 höchsten Berge der Sächsi­schen Schweiz

• Die 300 höchsten Berge (kommentiert)

• Höhen­differenzen

• Panoramatafel Großer Zschirnstein

• Quellen

• Die Tafelberge

• Register Große Karte

• Bibliographie

• Lapidaria Medior

• Kartensignaturen und Typo­gra­phie

• Kartensignaturen mit SVG be­schrei­ben

• Vimage-SVG

• Straßenschilder

• Verzeichnis der Karten­signa­turen

• Wegezeichen

• Das große SZ

• NSG-Grenzen

Anhang

Vimage-SVG

Eine Implementation zur Beschreibung von Kartenzeichen

SVG oder Scalable Vector Graphics - ein Vektordatenstandard des Internet - ist ein sehr komplexes Datenformat. Die Scalable Vector Graphics (SVG) 1.1 Specification umfasst 719 Seiten und ist damit für eine leicht fassbare Beschreibung schlicht viel zu komplex.

Dennoch ist insbesondere das SVG-path-Element wunderbar geeignet, Kartensignaturen zu beschreiben.

Siehe hierzu auch die von Georg Held entworfenen Signaturen

Less is more

Rüsten wir SVG also ab - und es wird ein einfaches, softwareunabhängiges und mächtiges Konzept übrigbleiben, das in der Lage sein wird, alle in kartographischer Zeichentradition denkbaren Signaturen vollständig beschreiben zu können.

Nicht mehr, aber auch nicht weniger.

Diese Untermenge bezeichne ich als „Vimage-SVG“ und benutze sie zur Beschreibung der Punktsignaturen meiner Karten.

Rahmenbedingungen

Zunächst sei eine „Protogeometrie“ wie folgt festgelegt:

  • Die Maßeinheit sei immer 1/100 mm, den wir als Feineinheit F bezeichnen.
  • (Dies ist eine Anleihe bei dem Kartographieprogramm OCAD.)
  • Die Zeichen werden grundsätzlich auf einem Bild von 8 x 6 mm oder 800 x 600 F aufgebaut
  • Die Koordinaten laufen kartesisch.
  • Der Koordinatennullpunkt befindet sich mittig im Bild. Das ist kartesisch 400,300 F.
  • Es gibt eine Strichfarbe und eine Füllfarbe. Die Standardstrichfarbe ist schwarz, die Standardfüllfarbe "nicht füllen".
  • Es wird immer mit einer runden Zeichenspitze mit dem Standarddurchmesser 10 F = 0,1 mmgezeichnet.
Es können auch andere Bildgrößen gewählt werden, auch liegt in älteren Signaturen der Koordinatennullpunkt in 1/3 Bildhöhe, also etwas unter dem Bildmittelpunkt.

Elemente

Nun kann alles, was nicht unbedingt notwendig ist, aus SVG verbannt werden. Fundamental ist das Pfad-Element. Weiterhin werden die 6 „Basic Shapes“ des SVG, Rechteck, Kreis, Ellipse, Strecke, Polylinie und Polygon genutzt. Auch wenn diese Basic Shapes durchaus einen gewissen Primitivitis-Vorwurf provozieren und mit dem path-Element ebenfalls erzeugbar sind - ein graphischer Standard sollte schon auch einen primitiven Kreis enthalten. Schließlich kommen mit dem g- und dem svg-Element noch 2 Verwaltungselemente hinzu, die in der „XML-Welt“ unentbehrlich sind.

Der Pfad (Nähere Beschreibung):

<path data="pathdata" stroke="col" stroke-width="num" fill="col" zx="num" zy="num">

Das Rechteck:

<rect x="num" y="num" width="num" heigth="num" stroke="col" stroke-width="num" fill="col">

Der Kreis:

<circle cx="num" cy="num" r="num" stroke="col" stroke-width="num" fill="col">

Die Ellipse:

<ellipse cx="num" cy="num" rx="num" ry="num" stroke="col" stroke-width="num" fill="col">

Die Strecke oder Linie:

<line x1="num" y1="num" x2="num" y2="num" stroke="col" stroke-width="num">

Die Polylinie:

<polyline points="list" stroke="col" stroke-width="num">

Das Polygon:

<polygon points="list" stroke="col" stroke-width="num" fill="col" zx="num" zy="num">

Ein kapselndes Gruppen-Element g:

<g id="name" stroke="col" stroke-width="num" fill="col">

Und schließlich das svg-Element, das dem html-Element einer HTML-Datei und die gesamte Beschreibung kapselt:

<svg width="num" height="num" stroke="col" stroke-width="num" fill="col">

Das ist schon alles.

Attribute

Die Attribute bedeuten:

 x="num"            ... Startpunkt X (Rechteck)
 y="num"            ... Startpunkt Y (Rechteck)
 x1="num"           ... 1. Punkt X (Strecke)
 y2="num"           ... 1. Punkt Y (Strecke)
 x2="num"           ... 2. Punkt X (Strecke)
 y2="num"           ... 2. Punkt Y (Strecke)
 cx="num"           ... Mittelpunkt X (Kreis/Ellipse)
 cy="num"           ... Mittelpunkt Y (Kreis/Ellipse)
 r="num"            ... Radius (Kreis)
 rx="num"           ... Halbachse X (Ellipse)
 ry="num"           ... Halbachse Y (Ellipse)
 zx="num"           ... Füllstartpunkt X (Pfad/Polygon)
 zy="num"           ... Füllstartpunkt Y (Pfad/Polygon)
 width="num"        ... Breite (Rechtecks/Gesamtbild im svg-Element)
 height="num"       ... Höhe (Rechteck/Gesamtbild im svg-Element)
 stroke="col"       ... Linienfarbe (Alle Elemente)
 stroke-width="num" ... Linienstärke (Alle Elemente)
 fill="col"         ... Füllfarbe (Füllbare Elemente)
 points="list"      ... Punktliste (Polylilie/Polygon)
 data="pathdata"    ... Pfadbefehle (Pfad-Element)
 id="name"          ... Identifikator oder Name (g-Element)
  
Die beiden Attribute zx und zy sind nicht Bestandteil des svg-Standards. Sie legen einen Füllstartpunkt fest. Sie wurden hinzufügt, um für beim Füllen insbesondere bei konvexen Polygonen und Pfaden innen und außen leicht unterscheidbar zu machen.

Werte der Attribute

Die Attribute können folgende Werte enthalten:

"num"       ... Zahlen, z. B. "100", die eine Koordinate oder Länge in 1/100 mm angeben
"col"       ... HTML-gerechte Farbangaben, z. B. "red", "#446688" oder "rgb(10,20,30)"
"list"      ... Koordinatenliste, z. B. "0 0 100 0 100 100 0 100 0 0"
"pathdata"  ... Pfadkommando, z. B. "M 100 100 L 0 100 L 0 0 Z"
"id"        ... Identifizierende Zeichenkette; zuläsige Zeichen: Kleinbuchstaben,
                Ziffern und Minusstrich, z. B. "laubbaum-hervorragend"  
Nebenbedingungen

Um Internet-Kompatibilität herzustellen, sollte die eigentliche Zeichendefintion wie folgt in einem svg- und einem g-Element gekapselt werden. So wird die Signatur in jedem SVG-fähigen Internet-Browser korrekt dargestellt:

<svg width="800" height="600">                [ Definiton der Zeichenfläche 600x800 ]
  <g fill="none"                              [ Standard: nicht füllen              ]
    transform="matrix(1,0,0,-1,400,400)"      [ Koordinatensystem transformieren    ]
    stroke-width="10"                         [ Standardstrichbreite 0,1 mm         ]
    stroke-linejoin="round"                   [ Zeichenstift immer rund             ]
    stroke-linecap="round">                   [ Ecken immer ausrunden               ]
    <!-- Hier die Signatur definieren -->
  </g>
</svg>
  
Die Zeichenfläche kann auch andere Größen, als 600 x 800 aufweisen. Dies wird erreicht, indem man das width- und das height-Attribut des svg-Elementes entsprechend ändert. Ausserdem müssen dann die Werte 400,400 in der Matrix des transform-Attributes des g-Elementes geändert werden, und zwar auf width/2 und heigth*2/3.

Nachwort

Mit Vimage-SVG habe ich mir alle meine bisher handgezeichneten Signaturen digital umgesetzt. Dabei hat sich gezeigt, dass sich alle in kartengestalterischer Tradition denkbaren Punktsignaturen mit ganz wenigen graphischen Funktionen erzeugen lassen.

Vimage-SVG ist also eine Art Codegrundlage für Kartenzeichen, wie das Alphabet eine Codegrundlage für unsere natürliche Sprache ist.

Da Vimage-SVG eine Untermenge von SVG ist, kann der Standard mit jedem SVG-fähigen Browser angezeigt werden.

Nun ist nicht gewiss, ob sich das Format SVG durchsetzen wird. Das ist aber gar nicht so sehr das Problem. Nachdem aus unserer natürlichen Sprache erst einmal 26 Laute „herauspräpariert“ worden sind, ist es ja auch eher nebensächlich, ob man diese in griechisch, kyrillisch oder lateinisch niederschreibt.

Wir haben das Format, dass 719 Seiten zu seiner Beschreibung benötigt, auf etwa 4 Seiten reduziert. Eine derartig „auf die Essenz reduzierter“ Funktionsumfang lässt sich leicht beliebigen in Software „zu Fuß“ und separat implementieren.

Hier der Quelltext eines SVG-Interpreters, den ich im Rahmen meines Reliefprogrammes Vimage implementiert habe. Mit etwa 1800 Visual-Basic-Quellzeilen alias 18 Programmierer-Tagewerken hält sich der Implementationsumfang in Grenzen.

Der Bildzugriff innerhalb von Vimage erfolgt hierbei mit der Untergrammbibliothek Plotlib. Zum Verständnis hier auch deren Quelltext (etwa 5700 Zeilen). (In anderen Umgebungen würde sich hierfür etwa das Windows-GDI nutzen lassen.)

Die graphischen Algorithmen sind überwiegend einfacher Art. Man benötigt eine kubische Bézierkurve, einen Kreis- und einen Ellipsengenerator. Das Füllen habe ich atypisch mit dem genialen Floodfill-Algorithmus umgesetzt. Relativ selten ist die Umrechnung des Ellipsenbogens von der gegebenen endpoint-Parameterization im die center-Parameterization gebräuchlicher Ellipsengeneratoren. Der Code hierzu findet sich in der Plotlib im Unterprogramm SUBPltArc unter der Kommentarzeile VON ENDPOINT PARAMETERIZATION IN CENTERPOINT PARAMETERIZATION UMRECHNEN. In Prosa beschrieben ist das Ganze in Abschnitt F.6.5 in Anhang F (Implementation Requirements) der SVG-Dokumentation: http://www.w3.org/TR/2003/REC-SVG11-20030114/implnote.html

Anmerkung: Die Quelltexte dienen nur zur Illustration des algorithmischen Umfanges. Eine Lauffähigkeit darf (auch wegen der zahlreichen externen Referenzen) nicht erwartet werden.


Links

Kartensignaturen und Typographie

Kartensignaturen mit SVG beschreiben

Vimage-SVG (Diese Seite)

Verzeichnis der Kartensignaturen

Zum Seitenanfang