|
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:
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):
Das Rechteck:
Der Kreis:
Die Ellipse:
Die Strecke oder Linie:
Die Polylinie:
Das Polygon:
Ein kapselndes Gruppen-Element g:
Und schließlich das svg-Element, das dem html-Element einer HTML-Datei und die gesamte Beschreibung kapselt:
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
Verzeichnis der Kartensignaturen
|