Subversion Repositories public

Compare Revisions

Ignore whitespace Rev 282 → Rev 283

/sportwatcher/trunk/doc/de/index.docbook
1,6 → 1,5
<?xml version="1.0" ?>
<!DOCTYPE book PUBLIC "-//KDE//DTD DocBook XML V4.1.2-Based Variant V1.1//EN" "dtd/kdex.dtd" [
<!ENTITY sportwatcher "<application>SportWatcher 0.6</application>">
<!ENTITY sportwatcher "<application>SportWatcher 0.7</application>">
<!ENTITY kappname "&sportwatcher;"><!-- Do *not* replace kappname-->
<!ENTITY package "kde-module"><!-- kdebase, kdeadmin, etc -->
<!ENTITY % addindex "IGNORE">
36,8 → 35,8
and in the FDL itself on how to use it. -->
<legalnotice>&FDLNotice;</legalnotice>
 
<date>2009-07-30</date>
<releaseinfo>0.6</releaseinfo>
<date>2009-09-18</date>
<releaseinfo>0.7</releaseinfo>
 
<abstract>
<para>&sportwatcher; ist ein Programm zum Auslesen der Daten aus einem Garmin Forerunner. Unterst&uuml;tzt werden alle GPS-Sportuhren, die &uuml;ber einen USB-Anschlu&szlig; verf&uuml;gen, wie der Garmin Forerunner 305.</para>
48,6 → 47,7
<keyword>SportWatcher</keyword>
<keyword>Garmin</keyword>
<keyword>GDAL</keyword>
<keyword>Mapnik</keyword>
</keywordset>
 
</bookinfo>
55,8 → 55,9
<title>Einleitung<!-- anchor id="cha.Einleitung" --></title>
<para>&sportwatcher; ist in erster Linie ein Programm zum Auslesen von diversen GPS-Empf&auml;ngern. Ich habe das Programm entwickelt als ich festgestellt habe, dass es f&uuml;r den von mir erworbenen Garmin Forerunner305 keine unter Linux lauff&auml;hige Software gibt. Da ich ausschlie&szlig;lich Linux verwende, kam das einzige unterst&uuml;tzte Betriebssystem Windows nat&uuml;rlich nicht in Frage. Also habe ich mich mit diesem, speziell f&uuml;r sportliches Training geeigneten GPS-Empf&auml;nger, etwas n&auml;her besch&auml;ftigt. Wie die meisten GPS-Empf&auml;nger von Garmin, verwendet auch dieser das NMEA-Protokoll zur Daten&uuml;bertragung. Zu dem fand ich (eher zuf&auml;llig) eine Bibliothek von "Dave Bailey" (&lt;dave &lt;at&gt; daveb &lt;dot&gt; net&gt;), welche einen Forerunner305 auslesen konnte. Den Sourcecode habe ich, mit freudlicher Genehmigung von Dave, als Basis f&uuml;r &sportwatcher; verwendet. Dadurch ist &sportwatcher; nun in der Lage, speziell den Garmin Forerunner305 und alle mit ihm kompatiblen GPS-Empf&auml;nger auszulesen.</para><sect1 id='sec.Untersttzte-GPS-Empfnger' >
<title>Unterst&uuml;tzte GPS-Empf&auml;nger<!-- anchor id="sec.Untersttzte-GPS-Empfnger" --></title>
<para>Grunds&auml;tzlich wird jeder GPS-Empf&auml;nger unterst&uuml;tzt, welcher &uuml;ber das NMEA-Protokoll verf&uuml;gt. Derzeit getestet sind jedoch nur folgende Ger&auml;te:</para><itemizedlist>
<listitem><para>Garmin Forerunner305</para></listitem><listitem><para>Garmin Forerunner205</para></listitem></itemizedlist><para>Wenn Sie ein anderes Ger&auml;t haben, welches mit &sportwatcher; funktioniert, dann senden Sie bitte ein E-Mail an: andreas &lt;at&gt; theosys &lt;dot&gt; at.</para></sect1></chapter><chapter id='cha.Installation' >
<para>Grunds&auml;tzlich wird jeder GPS-Empf&auml;nger unterst&uuml;tzt, welcher &uuml;ber das NMEA-Protokoll verf&uuml;gt und über eine USB-Schnittstelle verfügt. Derzeit getestet sind jedoch nur folgende Ger&auml;te:</para><itemizedlist>
<listitem><para>Garmin Forerunner305</para></listitem><listitem><para>Garmin Forerunner205</para></listitem></itemizedlist><para>Wenn Sie ein anderes Ger&auml;t haben, welches mit &sportwatcher; funktioniert, dann senden Sie bitte ein E-Mail an: andreas &lt;at&gt; theosys &lt;dot&gt; at.</para>
<note><para>Derzeit nicht unterst&uuml;tzt werden Ger&auml;te, welche einen ANT-Stick zur drahtlosen Daten&uuml;bertragung verwenden. Leider hat Garmin das daf&uuml;r verwendete Protokoll bisher nicht freigegeben, weshalb, bis auf Weiteres, keine Unterst&uuml;tzung m&ouml;glich ist.</para></note></sect1></chapter><chapter id='cha.Installation' >
<title>Installation<!-- anchor id="cha.Installation" --></title>
<para>&sportwatcher; ist in C++ f&uuml;r die Desktopoberfl&auml;che KDE geschrieben. Die Entwicklung fand ausschlie&szlig;lich unter Linux statt, wodurch die GNU Utilities ausgiebig verwendet wurden. <emphasis>SportWatcher ist open source!</emphasis> Das bedeutet, dass der Quellcode des Programms frei zug&auml;nglich ist. Der Quellcode, und damit das gesamte Programm, steht unter der <emphasis>GNU General Public License Version 3</emphasis>.</para><sect1 id='sec.Download' >
<title>Download<!-- anchor id="sec.Download" --></title>
68,10 → 69,10
]]></screen><para>Sie k&ouml;nnen auf das <ulink url="http://www.theosys.at/websvn/listing.php?repname=repos+1&amp;path=/sportwatcher/trunk/&amp;rev=0&amp;sc=0">Repository</ulink> mit dem garantiert aktuellsten Quellcode auch mit Ihrem Browser zugreifen.</para><sect2 id='sec.Bentigte-Komponenten' >
<title>Ben&ouml;tigte Komponenten<!-- anchor id="sec.Bentigte-Komponenten" --></title>
<para>Um &sportwatcher; erfolgreich &uuml;bersetzen zu k&ouml;nnen, ben&ouml;tigen Sie einige Softwarekomponenten, welche zuerst installiert werden m&uuml;ssen:</para><itemizedlist>
<listitem><para><ulink url="http://www.kde.org">KDE 4.1.x</ulink></para></listitem><listitem><para><ulink url="http://www.gdal.org">GDAL 1.5.x</ulink> (optional)</para></listitem></itemizedlist><sect3 id='sec:KDE-4.1.x' >
<title>KDE 4.1.x<!-- anchor id="sec:KDE-4.1.x" --></title>
<para>Ab der Version 0.6 ben&ouml;tigt SportWatcher mindestens die Version 4.1.0 von KDE. Mit &auml;lteren KDE-Versionen kann der Code nicht mehr &uuml;bersetzt werden!</para></sect3><sect3 id='sec:GDAL-1.5.x' >
<title>GDAL 1.5.x<!-- anchor id="sec:GDAL-1.5.x" --></title>
<listitem><para><ulink url="http://www.kde.org">KDE 4.1.x</ulink></para></listitem><listitem><para><ulink url="http://www.gdal.org">GDAL 1.5.x</ulink> (optional)</para></listitem></itemizedlist><sect3 id='sec.KDE-4.1.x' >
<title>KDE 4.1.x<!-- anchor id="sec.KDE-4.1.x" --></title>
<para>Ab der Version 0.6 ben&ouml;tigt SportWatcher mindestens die Version 4.1.0 von KDE. Mit &auml;lteren KDE-Versionen kann der Code nicht mehr &uuml;bersetzt werden!</para></sect3><sect3 id='sec.GDAL-1.5.x' >
<title>GDAL 1.5.x<!-- anchor id="sec.GDAL-1.5.x" --></title>
<para>&sportwatcher; ist in der Lage, einen Track mit einer Landkarte zu unterlegen. Diese Funktion wird &uuml;ber die Bibliothek GDAL realisiert. Die Verwendung von GDAL ist jedoch optional. &sportwatcher; kann auch ohne GDAL erfolgreich &uuml;bersetzt werden. Allerdings fehlt dann die M&ouml;glichkeit, Landkarten zu verwenden. Unter Debian testing steht derzeit die Version 1.5.4 von GDAL zur Verf&uuml;gung (Debian Squeeze im Juli 2009), welche f&uuml;r die Entwicklung von &sportwatcher; verwendet wurde. Unter Ubuntu ist bis einschlie&szlig;lich Version 8.04 LTS (Hardy Heron) nur die Version 1.4.x von GDAL enthalten. Diese und &auml;ltere Versionen sind nicht f&uuml;r &sportwatcher; geeignet. Ab Ubuntu 9.04 ist jedoch GDAL 1.5.x enthalten.</para>
<para>Es ist jedoch kein Problem, die neuere Version 1.6.0 zu verwenden. Falls Ihre Distribution bereits &uuml;ber diese neuere Version verf&uuml;gt, sollte das &Uuml;bersetzen problemlos m&ouml;glich sein. </para>
<para>openSUSE 11.0 stellt GDAL leider gar nicht zur Verf&uuml;gung. Zwar findet man GDAL als fertiges RPM daf&uuml;r leicht im Netz, aber es ist nicht leicht die ben&ouml;tigten Abh&auml;ngigkeiten zu erf&uuml;llen. Aus diesem Grund habe ich bei der Version 0.5 von SportWatcher auf die Einbindung von GDAL f&uuml;r openSUSE verzichtet.</para>
100,14 → 101,14
<title>Installation des Sourcecodes<!-- anchor id="sec.Installation-des-Sourcecodes" --></title>
<para>Soll SportWatcher f&uuml;r alle Benutzer installiert werden, dann sind unbedingt Administratorrechte (root) notwendig. Andernfalls kann das Programm auch in das lokale Verzeichnis installiert werden. Mit &sportwatcher; wird auch eine Datei Namens INSTALL mitgeliefert, in der sich die genaue Beschreibung des Installationsprozesses befindet. Unter Anderem finden Sie dort auch die Beschreibung f&uuml;r die Installation in ein anderes, als das Standardverzeichnis. Um &sportwatcher; f&uuml;r alle Benutzer zu installieren, melden Sie sich als Superuser root an und geben Sie folgenden Befehl auf der Kommandozeile ein:</para><screen>
<![CDATA[# make install
]]></screen><para>Nach der Installation k&ouml;nnen Sie das Programm mit <emphasis><application>sportwatcher</application></emphasis> von der Kommandozeile aus aufrufen, oder &uuml;ber das Men&uuml; <emphasis><guimenu>Dienstprogramme</guimenu>--&gt;<guimenuitem>Sportwatcher</guimenuitem></emphasis> aufrufen (gilt nur f&uuml;r KDE!).</para></sect3></sect2></sect1><sect1 id='sec.Einstellungen-unter-Linux' >
]]></screen><para>Nach der Installation k&ouml;nnen Sie das Programm mit <emphasis><command>sportwatcher</command></emphasis> von der Kommandozeile aus aufrufen, oder &uuml;ber das Men&uuml; <emphasis><guimenu>Dienstprogramme</guimenu>--&gt;<guimenuitem>Sportwatcher</guimenuitem></emphasis> aufrufen (gilt nur f&uuml;r KDE!).</para></sect3></sect2></sect1><sect1 id='sec.Einstellungen-unter-Linux' >
<title>Einstellungen unter Linux<!-- anchor id="sec.Einstellungen-unter-Linux" --></title>
<para>&sportwatcher;greift direkt auf das USB-Port zu, an dem Sie Ihren <hardware>Forerunner 305</hardware> angeschlossen haben. Allerdings fehlen einem normalen Anwender daf&uuml;r in der Regel die Berechtigungen, so das beim Versuch die Daten aus der Uhr auszulesen, eine Fehlermeldung erscheint. Startet man das Programm jedoch als Benutzer root, funktioniert das Auslesen von Daten einwandfrei. Diesem Problem kann man nun auf zwei Arten begegnen. Man kann SportWatcher immer als <emphasis>root</emphasis> ausf&uuml;hren, wovon ich jedoch dringend abrate, oder man manipuliert einmal die Einstellungen von <emphasis>udev</emphasis> und vergibt die notwendigen Berechtigungen. Im Folgenden wird Schritt f&uuml;r Schritt erkl&auml;rt, wie man die ben&ouml;tigten Berechtigungen einstellt. </para><sect2 id='sec.Fr-Debian-und' >
<para>&sportwatcher; greift direkt auf das USB-Port zu, an dem Sie Ihren <hardware>Forerunner 305</hardware> angeschlossen haben. Allerdings fehlen einem normalen Anwender daf&uuml;r in der Regel die Berechtigungen, so das beim Versuch die Daten aus der Uhr auszulesen, eine Fehlermeldung erscheint. Startet man das Programm jedoch als Benutzer root, funktioniert das Auslesen von Daten einwandfrei. Diesem Problem kann man nun auf zwei Arten begegnen. Man kann SportWatcher immer als <emphasis>root</emphasis> ausf&uuml;hren, wovon ich jedoch dringend abrate, oder man manipuliert einmal die Einstellungen von <emphasis>udev</emphasis> und vergibt die notwendigen Berechtigungen. Im Folgenden wird Schritt f&uuml;r Schritt erkl&auml;rt, wie man die ben&ouml;tigten Berechtigungen einstellt. </para><sect2 id='sec.Fr-Debian-und' >
<title>F&uuml;r Debian und (K)Ubuntu<!-- anchor id="sec.Fr-Debian-und" --></title>
<para>&Ouml;ffnen Sie eine Kommandozeile (Shell) und werden Sie root. Dann tippen Sie ein: </para><screen>
<![CDATA[# cd /etc/udev/rules.d
# vi z60-garmin.rules
]]></screen><para>Statt <emphasis><application>vi</application></emphasis> k&ouml;nnen Sie nat&uuml;rlich jeden beliebigen Texteditor verwenden. Tippen Sie nun folgende Zeilen in die neue Datei ein:</para><screen>
]]></screen><para>Statt <emphasis><command>vi</command></emphasis> k&ouml;nnen Sie nat&uuml;rlich jeden beliebigen Texteditor verwenden. Tippen Sie nun folgende Zeilen in die neue Datei ein:</para><screen>
<![CDATA[SYSFS{idVendor}=="091e", SYSFS{idProduct}=="0003", MODE="0666"
ATTRS{idVendor}=="091e", ATTRS{idProduct}=="0003", MODE="0666"
]]></screen><para>Speichern Sie die Datei und starten Sie UDEV mit folgendem Befehl neu:</para><screen>
114,7 → 115,7
<![CDATA[# /etc/init.d/udev restart
]]></screen><para>Ab jetzt sollte der direkte Zugriff auf jenes <hardware>USB-Port</hardware> erlaubt sein, an dem Sie Ihren <hardware>Forerunner305</hardware> angeschlossen haben.</para></sect2><sect2 id='sec.Andere-Distributionen' >
<title>Andere Distributionen<!-- anchor id="sec.Andere-Distributionen" --></title>
<para>Wenn Ihre Linuxdistribution UDEV verwendet, sollte die Beschreibung unter <xref linkend="sec.Fr-Debian-und" />gelten. Andernfalls fragen Sie Ihren Systemadministrator, oder lesen Sie die Dokumentation &uuml;ber das Berechtigungssystem f&uuml;r Schnittstellen, speziell <hardware>USB-Ports</hardware>.</para></sect2><sect2 id='sec.Es-funktioniert-immer' >
<para>Wenn Ihre Linuxdistribution UDEV verwendet, sollte die Beschreibung unter <xref linkend="sec.Fr-Debian-und" /> gelten. Andernfalls fragen Sie Ihren Systemadministrator, oder lesen Sie die Dokumentation &uuml;ber das Berechtigungssystem f&uuml;r Schnittstellen, speziell <hardware>USB-Ports</hardware>.</para></sect2><sect2 id='sec.Es-funktioniert-immer' >
<title>Es funktioniert immer noch nicht<!-- anchor id="sec.Es-funktioniert-immer" --></title>
<para>Falls die obigen Anweisungen keinen Erfolg bringen, pr&uuml;fen Sie die Vendor- und Produktnummer Ihres <hardware>GPS−Empf&auml;ngers</hardware>. Falls diese nicht den oben angegebenen entsprechen, setzen Sie die korrekten Nummern ein. Um die Nummern heraus zu bekommen, stecken Sie Ihren <hardware>GPS-Empf&auml;nger</hardware> an und tippen Sie folgenden Befehl auf der Befehlszeile ein:</para><screen>
<![CDATA[$ lsusb
154,7 → 155,7
<title>Der Men&uuml;punkt <guimenu>&Ouml;ffnen</guimenu><!-- anchor id="sec.Das-Men-ffnen" --></title>
<para>Nach dem Klick auf diesen Men&uuml;punkt &ouml;ffnet sich ein Dateidialogfenster. Es werden alle Dateien mit der Endung <literal role="extension">.gmn</literal> angezeigt, sofern welche vorhanden sind. Bei diesen Dateien handelt es sich um das von &sportwatcher; intern verwendete Dateiformat. Haben Sie Dateien in diesem Format vorliegen, k&ouml;nnen Sie diese einlesen und Ihren Aufzeichnungen hinzuf&uuml;gen.</para></sect3><sect3>
<title>Der Men&uuml;punkt <guimenuitem>Importieren</guimenuitem></title>
<para>&sportwatcher; ist in der Lage, Dateien im Format <literal role="extension">.tcx</literal> einzulesen. Dieses Format wird vom Programm <emphasis><application>Traningcenter</application></emphasis>, jener Software die von Garmin mit den Sportuhren mitgeliefert wird, erzeugt. Allerdings k&ouml;nnen auch andere Programme dieses Format ausgeben.</para>
<para>&sportwatcher; ist in der Lage, Dateien im Format <literal role="extension">.tcx</literal> einzulesen. Dieses Format wird vom Programm <emphasis><command>Traningcenter</command></emphasis>, jener Software die von Garmin mit den Sportuhren mitgeliefert wird, erzeugt. Allerdings k&ouml;nnen auch andere Programme dieses Format ausgeben.</para>
<para>Es &ouml;ffnet sich ein Dateidialog. W&auml;hlen Sie die gew&uuml;nschte Datei aus. &sportwatcher; liest die Datei ein und f&uuml;gt sie den bestehenden Aktivit&auml;ten hinzu.</para></sect3></sect2><sect2 id='sec.Daten-exportieren' >
<title>Daten exportieren<!-- anchor id="sec.Daten-exportieren" --></title>
<para>SportWatcher ist in der Lage, die gespeicherten Daten in verschiedene Formate zu exportieren. Dadurch k&ouml;nnen die Daten in verschiedenen anderen Programmen verarbeitet werden und dort nach weiteren, vielleicht f&uuml;r das entsprechende Programm einzigartigen Methoden, Arten visualisiert werden.</para><sect3>
162,8 → 163,8
<para>SportWatcher unterst&uuml;tzt derzeit folgende Formate:</para><itemizedlist>
<listitem><para>TCX - Garmin Trainig Center</para></listitem><listitem><para>GPX - GPS Exchange Format</para></listitem><listitem><para>OSM - Open Street Map Format</para></listitem><listitem><para>HRM - Polar Heart Rate Monitor Format</para></listitem></itemizedlist><para>Das Format GPX kann von diversen Programmen zum Bearbeiten und Darstellen von Landkarten verwendet werden.</para>
<para>OSM wird von <ulink url="http://www.openstreetmap.org">Open Street Map</ulink> verwendet, um Landkarten in Form von Vektordaten zu speichern.</para>
<para>Die mit den Pulsuhren von Polar mitgelieferten Programme erzeugen das Format HRM und k&ouml;nnen es auch einlesen. SportWatcher kann dieses Format zwar exportieren, jedoch nicht einlesen. W&auml;hlen Sie den Men&uuml;punkt <guimenuitem>Puls speichern</guimenuitem>, um die Pulsdaten im HRM-Format zu speichern.</para></sect3><sect3 id='sec.Menpunkt.-Speichern-unter-17' >
<title>Das Men&uuml; <guimenuitem>Speichern als ...</guimenuitem><!-- anchor id="sec.Menpunkt.-Speichern-unter-17" --></title>
<para>Die mit den Pulsuhren von Polar mitgelieferten Programme erzeugen das Format HRM und k&ouml;nnen es auch einlesen. SportWatcher kann dieses Format zwar exportieren, jedoch nicht einlesen. Da dieses Format keine Geodaten enth&auml;lt, w&uuml;rde auch keinen Sinn ergeben, dieses Format importieren zu wollen. W&auml;hlen Sie den Men&uuml;punkt <guimenuitem>Puls speichern</guimenuitem>, um die Pulsdaten im HRM-Format zu speichern.</para></sect3><sect3 id='sec.Menpunkt.-Speichern-unter-1' >
<title>Das Men&uuml; <guimenuitem>Speichern als ...</guimenuitem><!-- anchor id="sec.Menpunkt.-Speichern-unter-1" --></title>
<para>Unter diesem Men&uuml;punkt &ouml;ffnet sich ein Dateidialog, welcher eine Datei unter den Formaten TCX (Standard), GPX, oder OSM speichert.</para>
<screenshot>
<screeninfo>Speichern unter</screeninfo>
196,7 → 197,7
</screenshot>
<para>Mit Hilfe des Men&uuml;punktes <guimenuitem>Umbenennen</guimenuitem>, kann der Name einer Aktivit&auml;t ge&auml;ndert werden. Es &ouml;ffnet sich ein Dialogfenster, in dem der aktuelle Name erscheint. Da ein individueller Name lediglich 15 Zeichen lang sein kann, erscheint der generierte Name, bestehend aus Datum und Uhrzeit, gek&uuml;rzt. Tippen Sie den gew&uuml;nschten Namen ein und klicken Sie auf den Button <keycombo action="click"><mousebutton>Ok</mousebutton></keycombo>. Der neue Name erscheint sofort im Verzeichnisbaum und ist automatisch permanent gespeichert.</para></sect2></sect1><sect1 id='sec.Eventuell-notwendige-Einstellungen' >
<title>Das Men&uuml; <guimenu>Einstellungen</guimenu><!-- anchor id="sec.Eventuell-notwendige-Einstellungen" --></title>
<para>&sportwatcher;muss nicht extra eingestellt werden um sinnvoll verwendet werden zu k&ouml;nnen. Es kann jedoch notwendig sein, den Pfad in dem SportWatcher seine Daten ablegt, einzustellen. Zum Beispiel, wenn mehrere Benutzer mit einer Uhr Trainieren und es eine gemeinsame Datenbasis geben soll. Auch um eine Landkarte darzustellen, sind sehr wahrscheinlich einige Einstellungen notwendig. Das h&auml;ngt ganz davon ab, welche Art von Landkarte Sie verwenden wollen. Die folgenden Punkte zeigen Schritt f&uuml;r Schritt, welche Einstellungen in &sportwatcher; m&ouml;glich sind und wie Sie damit umgehen.</para>
<para>&sportwatcher; muss nicht extra eingestellt werden um sinnvoll verwendet werden zu k&ouml;nnen. Es kann jedoch notwendig sein, den Pfad in dem SportWatcher seine Daten ablegt, einzustellen. Zum Beispiel, wenn mehrere Benutzer mit einer Uhr Trainieren und es eine gemeinsame Datenbasis geben soll. Auch um eine Landkarte darzustellen, sind sehr wahrscheinlich einige Einstellungen notwendig. Das h&auml;ngt ganz davon ab, welche Art von Landkarte Sie verwenden wollen. Die folgenden Punkte zeigen Schritt f&uuml;r Schritt, welche Einstellungen in &sportwatcher; m&ouml;glich sind und wie Sie damit umgehen.</para>
<screenshot>
<screeninfo>Men&uuml; Einstellungen</screeninfo>
<mediaobject>
226,16 → 227,16
<![CDATA[<Max. HF> = 220 - <Lebensalter>
]]></screen><para>Von dieser maximalen Herzfrequenz werden nun die Schwellen (Limits oder Zonen) wie folgt berechnet (x% von HF):</para>
<informaltable><tgroup cols="4" colsep="1" rowsep="1">
<colspec colname="col0" align="left"/>
<colspec colname="col1" align="left"/>
<colspec colname="col2" align="left"/>
<colspec colname="col3" align="left"/>
<colspec colname="col0" align="left" />
<colspec colname="col1" align="left" />
<colspec colname="col2" align="left" />
<colspec colname="col3" align="left" />
<tbody>
<row>
<entry align="left" valign="top">Zone</entry>
<entry align="left" valign="top">Intensit&auml;t</entry>
<entry align="left" valign="top">Laufen</entry>
<entry align="left" valign="top">Radfahren</entry>
<entry align="center" valign="top">Zone</entry>
<entry align="center" valign="top">Intensit&auml;t</entry>
<entry align="center" valign="top">Laufen</entry>
<entry align="center" valign="top">Radfahren</entry>
</row>
<row>
<entry align="left" valign="top">0 (&lt;1)</entry>
287,7 → 288,7
<title>HRM-Dateien<!-- anchor id="sec.HRM-Dateien" --></title>
<para>SportWatcher ist in der Lage, die von Ihrem GPS-Empf&auml;nger gelesenen Pulsdaten in eine Polar-kompatible Datei zu speichern. Dabei wird Ihnen das hier angegebene Verzeichnis vorgeschlagen. Da die Spoftware von Polar die Dateien ebenfalls in einem bestimmten Verzeichnis ablegt, k&ouml;nnen Sie hier dieses Verzeichnis angeben und die Pulsdaten dann dort ablegen. Dadurch ist es m&ouml;glich, auch mit der Polar eigenen Software die Daten einzulesen und darzustellen.</para></sect3><sect3 id='sec.Landkartendatei' >
<title>Landkartendatei<!-- anchor id="sec.Landkartendatei" --></title>
<para>Hier wird eine Datei angegeben, welche entweder direkt eine Landkarte enth&auml;lt, oder eine Steuerdatei ist, welche SportWatcher anweist, eine Landkarte zu laden. Tats&auml;chlich wird durch den Map type (siehe <xref linkend="sec.Landkartentyp" />) festgelegt, um welche Art von Landkarte es sich handelt. Raster images sind bilder in verschiedenen Formaten, die eine Landkarte darstellen k&ouml;nnen. Damit SportWatcher solche Karten verwenden kann, m&uuml;ssen die Geokoordinaten der linken oberen und der rechten unteren Ecke bekannt sein. Lediglich das Format "TIFF" beinhaltet die M&ouml;glichkeit Geokoordinaten direkt in der Datei zu speichern. Liegt eine solche Datei vor, m&uuml;ssen keine Geokoordinaten angegegeben werden. In jedem Fall haben Rasterimages den Nachteil, dass sie lediglich eine bestimmte Aufl&ouml;sung haben und nur jeweils ein bestimmtes Gebiet anzeigen. Liegt die Rad- oder Laufroute au&szlig;erhalb der Karte, kann eben keine Karte unterlegt werden. Dem kann man zuvorkommen, in dem man z.B. Vektordateien, wie SHP (derzeit noch nicht unterst&uuml;tzt!) oder einen WMS-Server verwendet. Besonders letzterer bietet sich hier besonders an, da der Aufwand am geringsten ist. Hat man einmal einen WMS-Server (im Internet) gefunden, welcher die gew&uuml;nschten Gebiete anzeigt, erledigt SportWatcher den Rest.</para></sect3><sect3 id='sec.Landkartentyp' >
<para>Hier wird eine Datei angegeben, welche entweder direkt eine Landkarte enth&auml;lt, oder eine Steuerdatei ist, welche SportWatcher anweist, eine Landkarte zu laden. Tats&auml;chlich wird durch den Map type (siehe <xref linkend="sec.Landkartentyp" />) festgelegt, um welche Art von Landkarte es sich handelt. Raster images sind Bilder in verschiedenen Formaten, die eine Landkarte darstellen k&ouml;nnen. Damit SportWatcher solche Karten verwenden kann, m&uuml;ssen die Geokoordinaten der linken oberen und der rechten unteren Ecke bekannt sein. Lediglich das Format "TIFF" beinhaltet die M&ouml;glichkeit Geokoordinaten direkt in der Datei zu speichern. Liegt eine solche Datei vor, m&uuml;ssen keine Geokoordinaten angegegeben werden. In jedem Fall haben Rasterimages den Nachteil, dass sie lediglich eine bestimmte Aufl&ouml;sung haben und nur jeweils ein bestimmtes Gebiet anzeigen. Liegt die Rad- oder Laufroute au&szlig;erhalb der Karte, kann eben keine Karte unterlegt werden. Dem kann man zuvorkommen, in dem man z.B. Vektordateien, wie SHP (derzeit noch nicht unterst&uuml;tzt!) oder einen WMS-Server verwendet. Besonders letzterer bietet sich hier besonders an, da der Aufwand am geringsten ist. Hat man einmal einen WMS-Server (im Internet) gefunden, welcher die gew&uuml;nschten Gebiete anzeigt, erledigt SportWatcher den Rest.</para></sect3><sect3 id='sec.Landkartentyp' >
<title>Landkartentyp<!-- anchor id="sec.Landkartentyp" --></title>
<para>Hier kann der zu verwendende Landkartentyp eingestellt werden. &sportwatcher; verwendet die Bibliothek GDAL um die angegebenen Landkarten (siehe <xref linkend="sec.Landkartendatei" />) zu verarbeiten. Zumeist unterst&uuml;tzt GDAL erheblich mehr Formate als &sportwatcher; zur Verf&uuml;gung stellt. Da jedoch jedes der Formate einen gewissen Aufwand bedeutet, werden derzeit nur einige der wichtigsten Formate zur Verf&uuml;gung gestellt.</para></sect3><sect3 id='sec.Einheiten' >
<title>Einheiten<!-- anchor id="sec.Einheiten" --></title>
376,16 → 377,457
<title>Landkarte aus Rasterimage<!-- anchor id="sec.Landkarte-aus-Raster" --></title>
<para>Liegt eine Landkarte in Form von Rasterdaten vor, ben&ouml;tigt SportWatcher geographische Bezugspunkte. Formate wie PNG (Portable Network Graphics), BMP (Bitmap), GIF (Graphics Image Format), etc., gelten als Raster Images. Die Landkarten liegen also in Form von Rasterdaten vor. Zun&auml;chst gilt es, eine Landkarte des gew&uuml;nschten Gebiets, in der gew&uuml;nschten Aufl&ouml;sung zu finden. Ist das geschafft, muss heraus gefunden werden, in welchem geod&auml;tischen Datum die Karte gezeichnet ist. Das kann schon schwieriger sein, ist aber unbedingt erforderlich! Weis man endlich das geod&auml;tische Datum, m&uuml;ssen die linke obere und die rechte untere Ecke der Landkarte in Form von Geokoordinaten ermittelt werden. Erst jetzt k&ouml;nnen die Einstellungen sinnvoll in SportWatcher vorgenommen werden. Unter 4.1.3.6 Map file kann nun der Pfad und der Dateiname der Datei, welche die Landkarte beinhaltet, eingegeben werden. Unter <xref linkend="sec.Landkartentyp" /> muss noch der entsprechende Dateityp ausgew&auml;hlt werden. Damit ist es beinahe geschafft. Zuletzt m&uuml;ssen noch die Geokoordinaten der Eckpunkte der Landkarte eingegeben werden. Diese werden, wie unter <xref linkend="sec.Grafikkoordinaten" /> beschrieben, eingegeben. Nun sollte der Track bereits mit einer Landkarte unterlegt dargestllt werden. Es ist nicht notwendig, dass die Landkarte genau die Gr&ouml;&szlig;e des Tracks hat. Die Landkarte sollte viel mehr Ihr gesamtes Trainingsgebiet umfassen. SportWatcher schneidet den ben&ouml;tigten Teil selbstst&auml;ndig aus der Landkarte aus, zieht ihn f&uuml;r die Darstellung am Bildschirm zurecht und zeigt die Landkarte an.</para></sect1><sect1 id='sec.Shape-Dateien' >
<title>Shape Dateien<!-- anchor id="sec.Shape-Dateien" --></title>
<para>Bei Shape Dateien handelt es sich um eine Art Datenbankdatei, welche eine Landkarte in Form von Vektoren enth&auml;lt. SportWatcher zeichnet eine Landkarte also auf Grund von Vektorkoordinaten.</para>
<note><para>Dieses Format ist derzeit nicht implementiert!</para></note></sect1><sect1 id='sec.PostGIS-Datenbank' >
<para>Bei Shape Dateien handelt es sich um eine Art Datenbankdatei, welche eine Landkarte in Form von Vektoren enth&auml;lt. Mit Hilfe der Bibliothek <emphasis>Mapnik</emphasis> ist &sportwatcher; in der Lage, eine Landkarte aus Vektordaten zu zeichnen. Damit das funktioniert, ben&ouml;tigt man zun&auml;chtst einige Shape-Dateien, welche die Landkartendaten der gew&uuml;nschten Region beinhalten. Zumeist befinden sich die Dateien in einer ZIP-Datei (oder anderem Format) gepackt. Sie m&uuml;ssen die Dateien in der Regel also zuerst in ein Verzeichnis entpacken.</para>
<para>Sind die Shape-Dateien vorhanden, braucht &sportwatcher; noch eine <emphasis>Beschreibungsdatei</emphasis> (Mapdatei), welche angibt wie die Inhalte der Shape-Dateien zu interpretieren sind. Die folgenden Punkte werden anhand der Shape-Dateien der <ulink url="http://download.geofabrik.de/osm/">Geofabrik</ulink> erkl&auml;ren, wie die Beschreibungsdatei aufgebaut ist.</para><sect2 id='sec.Quellen-fr-Shape-Dateien' >
<title>Quellen f&uuml;r Shape-Dateien<!-- anchor id="sec.Quellen-fr-Shape-Dateien" --></title>
<itemizedlist>
<listitem><para><ulink url="http://downloads.cloudmade.com/">Cloudmade</ulink></para></listitem><listitem><para><ulink url="http://download.geofabrik.de/osm/">Geofabrik</ulink></para></listitem></itemizedlist><para>Unter <xref linkend="sec.Mapdatei" /> ist der Aufbau der Beschreibungsdatei (Mapdatei) beschrieben.</para></sect2></sect1><sect1 id='sec.PostGIS-Datenbank' >
<title>PostGIS Datenbank<!-- anchor id="sec.PostGIS-Datenbank" --></title>
<para>Eine weitere M&ouml;glichkeit eine Landkarte in Form von Vektoren zu speichern, ist eine Datenbank. Speziell die Datenbank PostgreSQL eignet sich daf&uuml;r hervorragend, da sie &uuml;ber die Erweiterungsm&ouml;glichkeit PostGIS verf&uuml;gt. Diese Erweiterung stattet die Datenbank mit der F&auml;higkeit aus, Geokoordinaten direkt zu verarbeiten und damit diverse Berechnungen anzustellen. SportWatcher ist mit Hilfe von Mapnik in der Lage, auf eine OSM konforme Datenbank zuzugreifen und diese in eine Landkarte zu konvertieren.</para>
<note><para>Diese Funktion ist derzeit nicht implementiert!</para></note></sect1></chapter><chapter id='cha.Credits' >
<para>Eine weitere M&ouml;glichkeit eine Landkarte in Form von Vektoren zu speichern, ist eine Datenbank. Speziell die Datenbank <emphasis>PostgreSQL</emphasis> eignet sich daf&uuml;r hervorragend, da sie &uuml;ber die Erweiterungsm&ouml;glichkeit <emphasis>PostGIS</emphasis> verf&uuml;gt. Diese Erweiterung stattet die Datenbank mit der F&auml;higkeit aus, Geokoordinaten direkt zu verarbeiten und damit diverse Berechnungen anzustellen. SportWatcher ist mit Hilfe von Mapnik in der Lage, auf eine OSM (Open Street Map) konforme Datenbank zuzugreifen und diese in eine Landkarte zu konvertieren.</para>
<para>Damit das funktioniert, wird jedoch eine Beschreibungsdatei (Mapdatei) ben&ouml;tigt. Diese Datei beinhaltet ein Regelwerk welches beschreibt, wie die einzelnen Komponenten einer Landkarte zu zeichnen sind. F&uuml;r eine Beschreibung des Aufbaus einer Mapdatei siehe <xref linkend="sec.Mapdatei" />.</para></sect1><sect1 id='sec.OSM-Dateien' >
<title>OSM Dateien<!-- anchor id="sec.OSM-Dateien" --></title>
<para>OpenStreetMap ist ein freies Projekt, welches f&uuml;r jeden frei nutzbare Geodaten sammelt. Mit Hilfe dieser Daten k&ouml;nnen Weltkarten gerendert oder Spezialkarten abgeleitet werden. Auch auf der <ulink url="http://www.openstreetmap.org">OpenStreetMap-Startseite</ulink> ist eine solche Karte abrufbar.</para>
<para>Der Kern des Projekts ist eine wiki-&auml;hnliche Datenbank mit geographischen Daten. Diese d&uuml;rfen gem&auml;&szlig; der <action>Creative Commons Attribution-ShareAlike 2.0-Lizenz</action> verwendet werden. Dadurch ist eine Einbindung in Drucke, Webseiten und Anwendungen wie Navigationssoftware m&ouml;glich, ohne durch restriktive Lizenzen beschr&auml;nkt zu sein oder Entgelte zahlen zu m&uuml;ssen.</para>
<para>Die Datenbank befindet sich derzeit im Aufbau. F&uuml;r Deutschland und &Ouml;sterreich gibt es in gr&ouml;&szlig;eren und insbesondere Uni-St&auml;dten schon eine sehr gute Abdeckung, oft sogar detailreicher als bei kommerziellen Anbietern. So sind Fahrrad- und Wanderwege bei OpenStreetMap mit hoher Genauigkeit erfasst. Dagegen ist etwa in l&auml;ndlichen Bereichen der Datenbestand noch l&uuml;ckenhaft.</para>
<para>Die fertigen Kartendaten werden im „.osm“-Format ausgetauscht, einem XML-Format, dessen Syntax den Ausgaben der OpenStreetMap-API entspricht. Kopien der gesamten Datenbank werden w&ouml;chentlich zur Verf&uuml;gung gestellt („planet file“). Ebenso gibt es t&auml;gliche und st&uuml;ndliche Updates sowie Ausschnitte f&uuml;r einzelne L&auml;nder.</para>
<para>&sportwatcher; ist in der Lage, eine OSM-Datei direkt zu verarbeiten, sofern das entsprechende Plugin vorhanden ist (Standard unter Debian). Damit &sportwatcher; weis wie die Karte zu zeichnen ist, ben&ouml;tigt es eine Beschreibungsdatei (Mapdatei). Diese Datei beinhaltet ein Regelwerk welches beschreibt, wie die einzelnen Komponenten einer Landkarte zu zeichnen sind. F&uuml;r eine Beschreibung des Aufbaus einer Mapdatei siehe <xref linkend="sec.Mapdatei" />.</para></sect1><sect1 id='sec.Mapdatei' >
<title>Mapdatei<!-- anchor id="sec.Mapdatei" --></title>
<para>Eine Mapdatei (Beschreibungsdatei f&uuml;r Shape-Dateien) ist eine Datei im Format XML. Sie kann daher mit einem XML-Editor erstellt werden, oder auch mit einem beliebigen Texteditor. Sowohl der Sourcedistribution als auch der Bin&auml;rdistribution von &sportwatcher; liegen Mapdateien f&uuml;r die unter <xref linkend="sec.Shape-Dateien" /> beschriebenen Quellen bei. In der Bin&auml;rdistribution befinden sich diese im Verzeichnis <filename class="directory">/usr/share/sportwatcher</filename>.</para>
<para>Eine Mapdatei gliedert sich in Abschnitte und Unterabschnitte. Dabei spielt die Reihenfolge eine gewisse Bedeutung. Die folgende Struktur zeigt den grunds&auml;tzlichen Aufbau der Datei:</para><screen>
<![CDATA[<?xml version = '1.0' encoding = 'utf-8'?>
<!DOCTYPE Map>
<Map>
<Style>
<Rule>
<CssParameter></CssParameter>
<Symbolizer/>
</Rule>
</Style>
<Layer>
<StyleName></StyleName>
<DataSource>
<Parameter></Parameter>
</Datasource>
</Layer>
</Map>
]]></screen><para>Die einzelnen Elemente (<command>Map</command>, <command>Style</command>, ...) k&ouml;nnen Attribute enthalten. Die folgenden Punkte erkl&auml;ren jedes einzelne Element und seine Anwendung.</para><sect2 id='sec.Dateikopf' >
<title>Dateikopf<!-- anchor id="sec.Dateikopf" --></title>
<para>Der Kopf der Datei sieht immer gleich aus. Er definiert die Datei als XML-Datei. Die folgenden beiden Zeilen sind also unge&auml;ndert zu &uuml;bernehmen:</para><screen>
<![CDATA[<?xml version = '1.0' encoding = 'utf-8'?>
<!DOCTYPE Map>
]]></screen></sect2><sect2 id='sec.Element-Map' >
<title>Element: <markup>Map</markup><!-- anchor id="sec.Element-Map" --></title>
<para>Das Element Map leitet die Definition einer Landkarte ein. Dieses Element darf nur einmal in der Datei vorkommen.</para><itemizedlist>
<listitem><para>Element: <command>Map</command></para></listitem><listitem><para>Element type: Root Element</para></listitem><listitem><para>Attribute:</para><itemizedlist>
<listitem><para><command>bgcolor</command>: HTML-Farbcode f&uuml;r den Hintergrund der Landkarte (zum Beispiel <command>#000000</command>)</para></listitem><listitem><para><command>srs</command>: Koordinatensystem in dem die Landkarte erzeugt wurde (zum Beispiel <userinput>'+proj=latlong+datum=WGS84'</userinput> f&uuml;r das geografische Koordinatensystem WGS84)</para></listitem><listitem><para><command>buffer_size</command>: Standard: 0; Eine gute Zahl ist die H&auml;lfte der zu darstellenden Fl&auml;che um das Abschneiden von Bezeichnungen zu minimieren. Das beeinflusst den &ldquo;Envelope&rdquo;, welcher vom Plazierdetektor verwendet wird ( wie <command>'avoid_edges'</command> Parameter)</para></listitem></itemizedlist></listitem><listitem><para>Kinder:</para><itemizedlist>
<listitem><para><command>Style</command> (siehe <xref linkend="sec.Element-Style" />)</para></listitem><listitem><para><command>Layer</command> (siehe <xref linkend="sec.Element-Layer" />)</para></listitem></itemizedlist></listitem></itemizedlist></sect2><sect2 id='sec.Element-Style' >
<title>Element: <markup>Style</markup><!-- anchor id="sec.Element-Style" --></title>
<para>Das Element Style definiert wie ein Objekt gezeichnet werden soll. Dieses Element kann beliebig oft verwendet werden. Das Element Layer greift auf die Style-Elemente zur&uuml;ck und sorgt so daf&uuml;r, dass diese &uuml;berhaupt gezeichnet werden.</para><itemizedlist>
<listitem><para>Element: <command>Style</command></para></listitem><listitem><para>Element type: Sammlung von <command>Rules</command></para></listitem><listitem><para>Attribute</para><itemizedlist>
<listitem><para><command>name</command>: Name des Style-Elements. Der Name muss innerhalb der Datei eindeutig sein. Auf ein <command>Style</command> wird innerhalb eines <command>Layers</command> referenziert. Ist ein <command>Style</command> in keinem <command>Layer</command> referenziert, wird es ignoriert. </para></listitem></itemizedlist></listitem><listitem><para>Kinder:</para><itemizedlist>
<listitem><para><command>Rule</command> (siehe <xref linkend="sec.Element-Rule" />)</para></listitem></itemizedlist></listitem></itemizedlist></sect2><sect2 id='sec.Element-Rule' >
<title>Element: <markup>Rule</markup><!-- anchor id="sec.Element-Rule" --></title>
<para>Das Element <command>Rule</command> definiert wie ein Detail eines Objektes (siehe <xref linkend="sec.Element-Style" />) gezeichnet werden soll. Innerhalb eines <command>Style</command>-Elements k&ouml;nnen beliebig viele <command>Rule</command>-Elemente vorkommen.</para><itemizedlist>
<listitem><para>Element: <command>Rule</command></para></listitem><listitem><para>Element type: Definiert wie ein Detail zu zeichnen ist.</para></listitem><listitem><para>Attribute</para><itemizedlist>
<listitem><para><command>name</command>: Der Name des Rule-Elements. Dieser Name ist optional und kann weggelassen werden. Wird er angegeben, muss er inner halb der Datei eindeutig sein.</para></listitem><listitem><para><command>title</command>: Der Titel des Rule-Elements. Der Titel ist optional und kann weggelassen werden. Der Titel darf auch mehrfach in einem Dokument vorkommen.</para></listitem></itemizedlist></listitem><listitem><para>Kinder:</para><itemizedlist>
<listitem><para><command>Filter</command> (siehe <xref linkend="sec.Element-Filter" />)</para></listitem><listitem><para><command>ElseFilter</command> (siehe <xref linkend="sec.Element-ElseFilter" />)</para></listitem><listitem><para><command>MinScaleDenominator</command> (siehe <xref linkend="sec.Element-MinScaleDenominator" />)</para></listitem><listitem><para><command>MaxScaleDenominator</command> (siehe <xref linkend="sec.Element-MaxScaleDenominator" />)</para></listitem><listitem><para><command>PointSymbolizer</command> (siehe <xref linkend="sec.Element-PointSymbolizer" />)</para></listitem><listitem><para><command>LinePatternSymbolizer</command> (siehe <xref linkend="sec.Element-LinePatternSymbolizer" />)</para></listitem><listitem><para><command>PolygonPatternSymbolizer</command> (siehe <xref linkend="sec.Element-PolygonPatternSymbolizer" />)</para></listitem><listitem><para><command>TextSymbolizer</command> (siehe <xref linkend="sec.Element-TextSymbolizer" />)</para></listitem><listitem><para><command>ShieldSymbolizer</command> (siehe <xref linkend="sec.Element-ShieldSymbolizer" />)</para></listitem><listitem><para><command>LineSymbolizer</command> (siehe <xref linkend="sec.Element-LineSymbolizer" />)</para></listitem><listitem><para><command>PolygonSymbolizer</command> (siehe <xref linkend="sec.Element-PolygonSymbolizer" />)</para></listitem></itemizedlist></listitem></itemizedlist></sect2><sect2 id='sec.Element-Filter' >
<title>Element: <markup>Filter</markup><!-- anchor id="sec.Element-Filter" --></title>
<para>Filter dienen dazu, nur bestimmte Objekte zu zeichnen. Damit k&ouml;nnen zum Beispiel alle als &ldquo;Autobahn&rdquo; gekennzeichnten Eintr&auml;ge herausgefiltert werden und entsprechend gezeichnet werden. Das Element <command>Filter</command> kann innerhalb eines <command>Rule</command>-Elements nur einmal vorkommen. Ein <command>Filter</command> unterliegt einer bestimmten Syntax, welche von &sportwatcher; penibel gepr&uuml;ft wird. Neben einfachen Vergleichsausdr&uuml;cken, k&ouml;nnen auch regul&auml;re Ausdr&uuml;cke verwendet werden. Da in XML-Dateien die Zeichen &lt; (kleiner als) und &gt; (gr&ouml;&szlig;er als) bereits mit anderen Bedeutungen belegt sind, k&ouml;nnen sie nicht direkt verwendet werden. Statt dessen sind folgende <emphasis>Vergleichsoperatoren</emphasis> zu verwenden:</para><itemizedlist>
<listitem><para>Gr&ouml;&szlig;er als: &amp;gt;</para></listitem><listitem><para>Kleiner als: &amp;lt;</para></listitem><listitem><para>Gleich: = </para></listitem></itemizedlist><sect3 id='sec.Vergleich' >
<title>Vergleich<!-- anchor id="sec.Vergleich" --></title>
<para>Ein einfacher Vergleich besteht immer aus einer &lt;Variable&gt;, welche sich auf den Spaltennamen der Shape-Datei bezieht und auf einen M&ouml;glichen Inhalt der Spalte (&lt;value&gt;). Der Spaltennamen (&lt;variable&gt;) muss immer in Eckige Klammen ([]) eingeschlossen werden. Der M&ouml;gliche Inhalt, welche das Filterkriterium bildet, muss in einfachen Hochkomma ('') eingeschlossen werden. Zwischen der &lt;variable&gt; und der &lt;value&gt; befindet sich der Vergeichsoperator.</para><screen>
<![CDATA[<Filter>[<variable>] = '<value>'</Filter>
]]></screen><para>Mehrere Vergleiche k&ouml;nnen mit &ldquo;and&rdquo; oder &ldquo;or&rdquo; verkn&uuml;pft werden:</para><screen>
<![CDATA[<Filter>[CARTO] &gt;= 2 and [CARTO] &lt; 5</Filter>
]]></screen></sect3><sect3 id='sec.Vergleichsoperatoren' >
<title>Vergleichsoperatoren<!-- anchor id="sec.Vergleichsoperatoren" --></title>
<para>Die Vergleichsoperatoren &amp;lt; und &amp;gt; k&ouml;nnen mit = kombiniert werden. Dadurch ergeben sich insgesamt folgende Vergleichsoperatoren:</para>
<informaltable>
<tgroup cols="2" colsep="1" rowsep="1">
<colspec colname="col0" align="center" />
<colspec colname="col1" align="center" />
<tbody> <row>
<entry align="center" valign="top">Operator</entry>
<entry align="center" valign="top">Bedeutung</entry>
</row>
<row>
<entry align="center" valign="top">&amp;lt;</entry>
<entry align="left" valign="top">Kleiner als</entry>
</row>
<row>
<entry align="center" valign="top">&amp;gt;</entry>
<entry align="left" valign="top">Gr&ouml;&szlig;er als</entry>
</row>
<row>
<entry align="center" valign="top">=</entry>
<entry align="left" valign="top">Gleich</entry>
</row>
<row>
<entry align="center" valign="top">&amp;lt;=</entry>
<entry align="left" valign="top">Kleiner oder gleich</entry>
</row>
<row>
<entry align="center" valign="top">&amp;gt;=</entry>
<entry align="left" valign="top">Gr&ouml;&szlig;er oder gleich</entry>
</row>
<row>
<entry align="center" valign="top">&amp;lt;&amp;gt;</entry>
<entry align="left" valign="top">Ungleich</entry>
</row>
<row>
<entry align="center" valign="top">not</entry>
<entry align="left" valign="top">Umkehrung des folgenden Ausdrucks</entry>
</row> </tbody>
</tgroup>
</informaltable><screen>
<![CDATA[<Filter>[waterway]='canal' and not ([tunnel] = 'yes' or [tunnel] ='true')</Filter>
]]></screen><para>Zudem k&ouml;nnen regul&auml;re Ausdr&uuml;cke verwendet werden:</para><screen>
<![CDATA[<Filter>[place] = 'town' and [population].match('[5-9]\d\d\d\d')</Filter>
]]></screen><para>Siehe auch: <xref linkend="sec.Element-ElseFilter" /></para></sect3></sect2><sect2 id='sec.Element-ElseFilter' >
<title>Element: <markup>ElseFilter</markup><!-- anchor id="sec.Element-ElseFilter" --></title>
<para>Dieses Element geh&ouml;rt zum Element <command>Filter</command> und stellt den Teil dar, der angewendet wird wenn der Filter nicht zutrifft. Innerhalb des Elements <command>Rule</command> kann <command>ElseFilter</command> nur einmal vorkommen. Es k&ouml;nnen aber beliebig viele <command>Rule</command>-Elemente mit einem <command>ElseFilter</command>, statt einem <command>Filter</command>, verwendet werden.</para>
<para>Beispiel:</para><screen>
<![CDATA[<Style name="contours">
<Rule>
<Filter>[major] = 1</Filter>
<MaxScaleDenominator>25000</MaxScaleDenominator>
<MinScaleDenominator>100</MinScaleDenominator>
<LineSymbolizer>
<CssParameter name="stroke">#fb9b67</CssParameter>
</LineSymbolizer>
</Rule>
<Rule>
<ElseFilter/>
<MaxScaleDenominator>25000</MaxScaleDenominator>
<MinScaleDenominator>5000</MinScaleDenominator>
<LineSymbolizer>
<CssParameter name="stroke">#f45906</CssParameter>
</LineSymbolizer>
</Rule>
<Rule>
<ElseFilter/>
<MaxScaleDenominator>5000</MaxScaleDenominator>
<MinScaleDenominator>100</MinScaleDenominator>
<LineSymbolizer>
<CssParameter name="stroke">#f4062A</CssParameter>
</LineSymbolizer>
</Rule>
</Style>
]]></screen></sect2><sect2 id='sec.Element-MinScaleDenominator' >
<title>Element: <markup>MinScaleDenominator</markup><!-- anchor id="sec.Element-MinScaleDenominator" --></title>
<para>Will man eine digitale Landkarte machen und ermitteln welche Skalierung diese hat, dann gibt es zwei Aspekte die eine Rolle spielen: Die verwendete Projektion und die Aufl&ouml;sung die zum Anzeigen der Karte verwendet wird.</para><sect3 id='sec.Skalierung' >
<title>Skalierung<!-- anchor id="sec.Skalierung" --></title>
<para>Traditionell ist die Skalierung die Art, wie die wirkliche Welt auf Papier abgebildet wird. Sehen wir also eine Skalierung von 1:10.000 dann bedeutet das, ein Zentimeter am Papier entspricht 10.000 Zentimeter in der realen Welt. Da jede Lankarte auf Papier das Ergebnis einer Projektion ist, und da Projektionen oft nicht perfekt sind, wird eine Karte der echten Welt immer einige St&ouml;rungen mit sich bringen. Zum Beispiel haben Karten der &ldquo;British Ordnance Survey&rdquo;, welche mit einer Skalierung von 1:50.000 gefertigt wurden, eine tats&auml;chliche Sklaierung die variiert, abh&auml;ngig von der Position. So betr&auml;gt die Abweichung gegen Osten zwischen 1:49.980 und 1:50.025. Dieser Unterschied ist klein und wird kaum St&ouml;rungen verursachen.</para>
<para>Je gr&ouml;&szlig;er die Karte aber ist, desto gr&ouml;&szlig;er wird die St&ouml;rung. Betrachten wir zum Beispiel die folgende Karte der gesamten Erde wird klar, dass daf&uuml;r kein Massstab angegeben werden kann. Auf dieser Karte ist Afrika gleich gro&szlig; wie Gr&ouml;nland. In Wirklichkeit ist es aber gut 14 mal so gro&szlig;. Die pinken Kreise markieren Bereiche von gleicher Gr&ouml;&szlig;e in der realen Welt. &sportwatcher; verwendet intern dennoch eine Skalierung f&uuml;r solche Projektionen, aber es sollte klar sein, dass diese Skalierung keinen Wert hat, oder zumindest nur f&uuml;r einen bestimmten Bereich gilt.</para>
<screenshot>
<screeninfo>Weltkarte</screeninfo>
<mediaobject>
<imageobject>
<imagedata fileref="Tissot_mercator.png" format="PNG"></imagedata>
</imageobject>
<textobject>
<phrase>Weltkarte</phrase>
</textobject>
</mediaobject>
</screenshot>
<para>F&uuml;r weitere Details bez&uuml;glich Skalierung von Landkarten, siehe <ulink url="http://trac.mapnik.org/wiki/ScaleAndPpi"></ulink>.</para></sect3><sect3 id='sec.ScaleDenominator' >
<title>ScaleDenominator<!-- anchor id="sec.ScaleDenominator" --></title>
<para>Der Wert des <command>MinScaleDenominator</command> wird mit 1e-6 multipliziert. Ist die aktuelle Skalierung gr&ouml;&szlig;er oder gleich dem angegebenen Wert (hoch 1e-6), dann wird die Anweisung gezeichnet. Andernfalls wird sie ignoriert.</para>
<para>Beispiel:</para><screen>
<![CDATA[<Style name="text">
<Rule>
<Filter>[place] = 'city'</Filter>
<MaxScaleDenominator>10000000</MaxScaleDenominator>
<MinScaleDenominator>2000000</MinScaleDenominator>
<TextSymbolizer name="name" face_name="DejaVu Sans Book" size="10" fill="#000" dy="0" halo_radius="1" wrap_width="0"/>
</Rule>
</Style>
]]></screen><para>Der Wert 2.000.000 des obigen Beispiels wird mit 1e-6 multipliziert und das Ergebnis mit dem aktuellen Skalierungsfaktor verglichen. Ist der aktuelle Skalierungsfaktor gr&ouml;&szlig;er oder gleich dem Ergebnis (2), wird Text ausgegeben. Andernfalls nicht.</para></sect3></sect2><sect2 id='sec.Element-MaxScaleDenominator' >
<title>Element: <markup>MaxScaleDenominator</markup><!-- anchor id="sec.Element-MaxScaleDenominator" --></title>
<para>Der Wert des <command>MaxScaleDenominator</command> wird mit 1e-6 multipliziert. Ist die aktuelle Skalierung kleiner oder gleich dem angegebenen Wert (hoch 1e-6), dann wird die Anweisung gezeichnet. Andernfalls wird sie ignoriert. F&uuml;r weitere Details &uuml;ber Sklaierung siehe <xref linkend="sec.Element-MinScaleDenominator" />.</para></sect2><sect2 id='sec.Element-PointSymbolizer' >
<title>Element: <markup>PointSymbolizer</markup><!-- anchor id="sec.Element-PointSymbolizer" --></title>
<para>Ein <command>PointSymbolizer</command> definiert wie etwas an einem bestimmten Punkt gezeichnet werden soll. Innerhalb eines <command>Rule</command>-Elements k&ouml;nnen beliebig viele <command>PointSymbolizer</command> definiert werden.</para><itemizedlist>
<listitem><para>Element: <command>PointSymbolizer</command></para></listitem><listitem><para>Elementtype: Zeichnet einen bestimmten Punkt</para></listitem><listitem><para>Attribute:</para><itemizedlist>
<listitem><para><command>file</command>: Pfad zu einem Rasterbild in einem der Formate PNG oder JPG</para></listitem><listitem><para><command>width</command>: Breite des Rasterimage in Pixel</para></listitem><listitem><para><command>height</command>: H&ouml;he des Rasterimage in Pixel</para></listitem><listitem><para><command>type</command>: Type des Rasterimage (png, jpg, tiff)</para></listitem><listitem><para><command>allow_overlap</command>: Standard: false; Wenn auf &ldquo;true&rdquo; gesetzt, dann d&uuml;rfen sich die Punkte &uuml;berlappen</para></listitem><listitem><para><command>opacity</command>: Standard: 1; Gibt die Transparenz des Bildes an, wobei 0.0 vollkommen durchsichtig ist und 1.0 vollkommen undurchsichtig ist. Werte au&szlig;erhalb dieses Bereichs sind nicht erlaubt.</para></listitem></itemizedlist></listitem></itemizedlist><para>Beispiel:</para><screen>
<![CDATA[<PointSymbolizer file="/tmp/pub.png" width="16" height="16" type="png" />
]]></screen></sect2><sect2 id='sec.Element-LinePatternSymbolizer' >
<title>Element: <markup>LinePatternSymbolizer</markup><!-- anchor id="sec.Element-LinePatternSymbolizer" --></title>
<para>Zeichnet eine Linie in dem es das angegebene Rasterimage st&auml;ndig wiederholt.</para><itemizedlist>
<listitem><para>Element: <command>LinePatternSymbolizer</command></para></listitem><listitem><para>Elementtype: Zeichnet eine Linie mit einem Rasterimage</para></listitem><listitem><para>Attribute:</para><itemizedlist>
<listitem><para><command>file</command>: Pfad zu einem Rasterimage in einem der Formate PNG oder JPG</para></listitem><listitem><para><command>width</command>: Breite des Rasterimage in Pixel</para></listitem><listitem><para><command>heigh</command>t: H&ouml;he des Rasterimage in Pixel</para></listitem><listitem><para><command>type</command>: Type des Rasterimage (png, jpg, tiff)</para></listitem></itemizedlist></listitem></itemizedlist><para>Beispiel:</para><screen>
<![CDATA[<LinePatternSymbolizer width="16" height="16" type="png" file="/path/to/icon.png"/>
]]></screen></sect2><sect2 id='sec.Element-PolygonPatternSymbolizer' >
<title>Element: <markup>PolygonPatternSymbolizer</markup><!-- anchor id="sec.Element-PolygonPatternSymbolizer" --></title>
<para>Zeichnet eine Fl&auml;che mit einer Hintergrundfarbe und verteilt das Rasterimage gleichm&auml;&szlig;ig &uuml;ber die Fl&auml;che.</para>
<screenshot>
<screeninfo>PolygonPatternSymbolizer</screeninfo>
<mediaobject>
<imageobject>
<imagedata fileref="polygon_pattern.png" format="PNG"></imagedata>
</imageobject>
<textobject>
<phrase>PolygonPatternSymbolizer</phrase>
</textobject>
</mediaobject>
</screenshot><itemizedlist>
<listitem><para>Element: <command>PolygonPatternSymbolizer</command></para></listitem><listitem><para>Elementtype: Zeichnet eine Fl&auml;che mit einem Rasterimage</para></listitem><listitem><para>Attribute:</para><itemizedlist>
<listitem><para><command>file</command>: Pfad zu einem Rasterimage in einem der Formate PNG oder JPG</para></listitem><listitem><para><command>width</command>: Breite des Rasterimage in Pixel</para></listitem><listitem><para><command>height</command>: H&ouml;he des Rasterimage in Pixel</para></listitem><listitem><para><command>type</command>: Type des Rasterimage (png, jpg, tiff)</para></listitem></itemizedlist></listitem></itemizedlist><para>Beispiel:</para><screen>
<![CDATA[<PolygonPatternSymbolizer width="16" height="16" type="png" file="/path/to/icon.png"/>
]]></screen></sect2><sect2 id='sec.Element-TextSymbolizer' >
<title>Element: <markup>TextSymbolizer</markup><!-- anchor id="sec.Element-TextSymbolizer" --></title>
<para>Schreibt einen Text in einer angegebenen Farbe und Schrift.</para>
<para>Ein <command>TextSymbolizer</command> wird dazu verwendet, um die Elemente einer Landkarte zu beschriften. Dabei kann die Schrift, die Schriftgr&ouml;&szlig;e, sowie die Schriftfarbe gew&auml;hlt werden. Zus&auml;tzlich kann bestimmt werden, ob die Schift &uuml;ber dem Objekt angezeigt werden soll, oder entlang einer Linie (Beschriftung von Stra&szlig;en, Fl&uuml;ssen, etc.).</para><itemizedlist>
<listitem><para>Element: <command>TextSymbolizer</command></para></listitem><listitem><para>Elementtype: Beschriftet Objekte</para></listitem><listitem><para>Attribute:</para><itemizedlist>
<listitem><para><command>name</command>: Das ist der Feldname auf den sich der Text bezieht. Der Feldname bezieht sich auf eine Datenbank, oder dem Feld einer Shape Datei, oder dem Feld einer OSM-Datei. Im Falle einer Shape Datei oder einer OSM-Datei, muss der Feldname der Gro&szlig;-Kleinschreibung entsprechen.</para></listitem><listitem><para><command>face_name</command>: Der Name der zu verwendenden Schrift.</para></listitem><listitem><para><command>size</command>: Gr&ouml;&szlig;e der Schrift in Pixel</para></listitem><listitem><para><command>wrap_width</command>: L&auml;nge in Pixeln bevor ein Text umgebrochen wird.</para></listitem><listitem><para><command>fill</command>: Farbe des Textes (z.B.: #FFFFFF)</para></listitem><listitem><para><command>halo_radius</command>: Radius des Lichthofs um die Schrift in ganzen Pixel</para></listitem><listitem><para><command>dx, dy</command>: Deplaziere den Text um eine fixe Anzahl von Pixel um beide Achsen</para></listitem><listitem><para><command>min_distance</command>: Minimale Abstand zwischen sich wiederholenden Beschriftungen wie Stra&szlig;ennamen und Schildsymbolen</para></listitem><listitem><para><command>placement</command>: Standard: &ldquo;point&rdquo;; Beschriftung &uuml;ber dem Objekt. &ldquo;line&rdquo;; Beschriftung entlang der Linie des Objekts (Stra&szlig;en, Fl&uuml;sse, etc.)</para></listitem><listitem><para><command>alignment</command>: Vertikale Positionierung der Beschriftung relativ zu einem Punkt ("top" (Beschriftung oberhalb des Punkts), "middle" (Beschriftung &uuml;ber dem Punkt), "bottom" (Beschriftung unterhalb des Punkts)) Standard ist "bottom" </para></listitem></itemizedlist></listitem></itemizedlist><para>Beispiel:</para><screen>
<![CDATA[<TextSymbolizer name="FIELD_NAME" face_name="DejaVu Sans Book" size="10" fill="black" halo_fill= "white" halo_radius="1" placement="line" allow_overlap="false"/>
]]></screen></sect2><sect2 id='sec.Element-ShieldSymbolizer' >
<title>Element: <markup>ShieldSymbolizer</markup><!-- anchor id="sec.Element-ShieldSymbolizer" --></title>
<para>Ein <command>ShieldSymbolizer</command> wird verwendet um Schildsymbole auf eine Karte zu zeichnen. Die Symbole werden als Rasterimage angegeben.</para><itemizedlist>
<listitem><para>Element: <command>ShieldSymbolizer</command></para></listitem><listitem><para>Elementtype: Zeichnet Schildsymbole</para></listitem><listitem><para>Attribute:</para><itemizedlist>
<listitem><para><command>name</command>: Das ist der Feldname auf den sich der Text bezieht. Der Feldname bezieht sich auf eine Datenbank, oder dem Feld einer Shape Datei, oder dem Feld einer OSM-Datei. Im Falle einer Shape Datei oder einer OSM-Datei, muss der Feldname der Gro&szlig;-Kleinschreibung entsprechen.</para></listitem><listitem><para><command>face_name</command>: Name der zu verwendenden Schrift</para></listitem><listitem><para><command>fill</command>: Farbe der Schrift</para></listitem><listitem><para><command>placement</command>: Standard: &ldquo;point&rdquo;; Beschriftung &uuml;ber dem Objekt. &ldquo;line&rdquo;; Beschriftung entlang der Linie des Objekts (Stra&szlig;en, Fl&uuml;sse, etc.)</para></listitem><listitem><para><command>file</command>: Dateiname des Schildsymbols. Es muss sich um ein Rasterimage in einem der Formate PNG, JPG oder TIFF handeln.</para></listitem><listitem><para><command>type</command>: Typ des Rasterimages (png, jpg, tiff)</para></listitem><listitem><para><command>size</command>: Gr&ouml;&szlig;e der Schrift in Pixel</para></listitem><listitem><para><command>width</command>: Breite des Schildsymbols in Pixel</para></listitem><listitem><para><command>height</command>: H&ouml;he des Schildsymbols in Pixel</para></listitem><listitem><para><command>dx, dy</command>: Deplaziere den Text um eine fixe Anzahl von Pixel um beide Achsen</para></listitem><listitem><para><command>min_distance</command>: Minimale Abstand zwischen sich wiederholenden Beschriftungen wie Stra&szlig;ennamen und Schildsymbolen</para></listitem></itemizedlist></listitem></itemizedlist><para>Beispiel:</para><screen>
<![CDATA[<Style name="My Style">
<Rule>
<ShieldSymbolizer name="NAME" face_name="DejaVu Sans Bold" size="6" fill="#000000" min_distance="50" file="images/ushighway_shield_20.png" type="png" width="20" height="20" spacing="100" min_distance="50"></ShieldSymbolizer>
</Rule>
</Style>
]]></screen></sect2><sect2 id='sec.Element-LineSymbolizer' >
<title>Element: <markup>LineSymbolizer</markup><!-- anchor id="sec.Element-LineSymbolizer" --></title>
<para>Ein <command>LineSymbolizer</command> wird verwendet um eine Linie zu zeichnen. Dabei kann das Aussehen der Linie bestimmt werden.</para><itemizedlist>
<listitem><para>Element: <command>LineSymbolizer</command></para></listitem><listitem><para>Elementtype: Zeichnet eine Linie</para></listitem><listitem><para>Attribute:</para><itemizedlist>
<listitem><para>Keine</para></listitem></itemizedlist></listitem><listitem><para>Kinder:</para><itemizedlist>
<listitem><para><command>CssParameter</command> (siehe <xref linkend="sec.Element-CssParameter" />)</para></listitem></itemizedlist></listitem></itemizedlist><sect3 id='sec.Element-CssParameter' >
<title>Element: <markup>CssParameter</markup><!-- anchor id="sec.Element-CssParameter" --></title>
<para>Innerhalb eines <command>LineSymbolizer</command> werden die einzelnen Optionen mittels des Elements <command>CssParameter</command> definiert.</para><itemizedlist>
<listitem><para>Element: <command>CssParameter</command></para></listitem><listitem><para>Elementtype: Definiert Optionen f&uuml;r das Element <command>LineSymbolizer</command></para></listitem><listitem><para>Attribute:</para><itemizedlist>
<listitem><para><command>name</command>: Definiert den Namen einer Option.</para></listitem></itemizedlist></listitem></itemizedlist><para>Die folgende Tabelle listet die Namen der m&ouml;glichen Optionen und beschreibt ihre Bedeutung:</para>
<informaltable><tgroup cols="3" colsep="1" rowsep="1">
<colspec colname="col0" align="left" />
<colspec colname="col1" align="left" />
<colspec colname="col2" align="left" />
<tbody>
<row>
<entry align="center" valign="top">Option</entry>
<entry align="center" valign="top">Inhalt</entry>
<entry align="center" valign="top">Bedeutung</entry>
</row>
<row>
<entry align="left" valign="top">stroke</entry>
<entry align="left" valign="top">CSS Farbe</entry>
<entry align="left" valign="top">Ein Farbwert</entry>
</row>
<row>
<entry align="left" valign="top">stroke-width</entry>
<entry align="left" valign="top">0.0 - n</entry>
<entry align="left" valign="top">Breite der Linie in Pixeln</entry>
</row>
<row>
<entry align="left" valign="top">stroke-opacity</entry>
<entry align="left" valign="top">0.0 - 1.0</entry>
<entry align="left" valign="top">Transparenz; 0.0 ist vollst&auml;ndig transparent. 1.0 ist vollkommen undurchsichtig.</entry>
</row>
<row>
<entry align="left" valign="top">stroke-linejoin</entry>
<entry align="left" valign="top">miter, round, bevel</entry>
<entry align="left" valign="top">Definiert die Art wie zwei Linien zusammengef&uuml;gt werden sollen:
<screenshot>
<screeninfo>Line join</screeninfo>
<mediaobject>
<imageobject>
<imagedata fileref="linejoin.png" format="PNG"></imagedata>
</imageobject>
<textobject>
<phrase>Line join</phrase>
</textobject>
</mediaobject>
</screenshot></entry>
</row>
<row>
<entry align="left" valign="top">stroke-linecap</entry>
<entry align="left" valign="top">round, butt, square</entry>
<entry align="left" valign="top">Definiert wie das Ende einer Linie aussehen soll:
<screenshot>
<screeninfo>Line cap</screeninfo>
<mediaobject>
<imageobject>
<imagedata fileref="linecap.png" format="PNG"></imagedata>
</imageobject>
<textobject>
<phrase>Line cap</phrase>
</textobject>
</mediaobject>
</screenshot></entry>
</row>
<row>
<entry align="left" valign="top">stroke-dasharray</entry>
<entry align="left" valign="top">0.0 - n, 0.0 - n</entry>
<entry align="left" valign="top">Ein Paar von L&auml;ngenwerten [a, b], wobei (a) die Strichl&auml;nge ist und (b) die L&auml;nge des Zwischenraums. Die Angabe ist in Pixel.</entry>
</row>
</tbody>
</tgroup></informaltable>
<para>Beispiel:</para><screen>
<![CDATA[<LineSymbolizer>
<CssParameter name="stroke">#0000ff</CssParameter>
<CssParameter name="stroke-width">4</CssParameter>
</LineSymbolizer>
]]></screen></sect3></sect2><sect2 id='sec.Element-PolygonSymbolizer' >
<title>Element: <markup>PolygonSymbolizer</markup><!-- anchor id="sec.Element-PolygonSymbolizer" --></title>
<para>Zeichnet ein unregelm&auml;&szlig;iges Vieleck (Polygon).</para><itemizedlist>
<listitem><para>Element: <command>PolygonSymbolizer</command></para></listitem><listitem><para>Elementtype: Polygon</para></listitem><listitem><para>Attribute:</para><itemizedlist>
<listitem><para>Keine</para></listitem></itemizedlist></listitem><listitem><para>Kinder:</para><itemizedlist>
<listitem><para><command>CssParameter</command> (siehe <xref linkend="sec.Element-CssParameter2." />)</para></listitem></itemizedlist></listitem></itemizedlist><sect3 id='sec.Element-CssParameter2.' >
<title>Element: <markup>CssParameter</markup><!-- anchor id="sec.Element-CssParameter2." --></title>
<para>Innerhalb eines <command>PolygonSymbolizer</command> werden die einzelnen Optionen mittels des Elements <command>CssParameter</command> definiert.</para><itemizedlist>
<listitem><para>Element: <command>CssParameter</command></para></listitem><listitem><para>Elementtype: Definiert Optionen f&uuml;r das Element <command>PolygonSymbolizer</command></para></listitem><listitem><para>Attribute:</para><itemizedlist>
<listitem><para><command>name</command>: Definiert den Namen einer Option.</para></listitem></itemizedlist></listitem></itemizedlist><para>Die folgende Tabelle listet die Namen der m&ouml;glichen Optionen und beschreibt ihre Bedeutung:</para>
<informaltable><tgroup cols="3" colsep="1" rowsep="1">
<colspec colname="col0" align="left" />
<colspec colname="col1" align="left" />
<colspec colname="col2" align="left" />
<tbody>
<row>
<entry align="left" valign="top">Option</entry>
<entry align="left" valign="top">Inhalt</entry>
<entry align="left" valign="top">Bedeutung</entry>
</row>
<row>
<entry align="left" valign="top">fill</entry>
<entry align="left" valign="top">CSS Farbe</entry>
<entry align="left" valign="top">Ein Farbwert</entry>
</row>
<row>
<entry align="left" valign="top">fill-opacity</entry>
<entry align="left" valign="top">0.0 - 1.0</entry>
<entry align="left" valign="top">Transparenz; 0.0 ist vollst&amp;auml;ndig transparent. 1.0 ist vollkommen undurchsichtig.</entry>
</row>
</tbody>
</tgroup></informaltable>
<para>Beispiel:</para><screen>
<![CDATA[<PolygonSymbolizer />
<CssParameter name="fill">steelblue</CssParameter>
<CssParameter name="fill-opacity">0.5</CssParameter>
</PolygonSymbolizer>
]]></screen></sect3></sect2><sect2 id='sec.Element-Layer' >
<title>Element: <markup>Layer</markup><!-- anchor id="sec.Element-Layer" --></title>
<itemizedlist>
<listitem><para>Element: <command>Layer</command></para></listitem><listitem><para>Element type: References a Style and a DataSource</para></listitem><listitem><para>Attributes:</para><itemizedlist>
<listitem><para><command>name</command>: Der Name des Layers. Diser Name muss eindeutig sein!</para></listitem><listitem><para><command>status</command>: Standard "off"; on oder off, "0" oder "1"; Nur wenn der Status aktiv ist (on, 1, true), wird das Layer gezeichnet.</para></listitem><listitem><para><command>clear_label_cache</command>: Standard "off". Wird das auf &ldquo;on&rdquo; gesetzt, wird die interne Liste zum Setzen von Objekten gel&ouml;scht. Alle Objekte in diesem Layer und in den folgenden, werden ohne R&uuml;cksicht auf vorherige Plazierungen gezeichnet.</para></listitem><listitem><para><command>srs</command>: Definiert die Projektion, welche f&uuml;r dieses Layer verwendet werden soll (z.B.: <userinput>+proj=latlong +datum=WGS84</userinput>)</para></listitem><listitem><para><command>title</command>: Standard: ""; Definiert einen Titel f&uuml;r dieses Layer</para></listitem><listitem><para><command>abstract</command>: Standard: &ldquo;&rdquo;; Definiert einen kurzen Beschreibungstext f&uuml;r dieses Layer.</para></listitem><listitem><para><command>minzoom</command>: Standard 0.0; Definiert den minimalen Vergr&ouml;&szlig;erungsfaktor.</para></listitem><listitem><para><command>maxzoom</command>: Standard: 1.797693134862316e+308; Definiert den maximalen Vergr&ouml;&szlig;erungsfaktor.</para></listitem><listitem><para><command>queryable</command>: Standard "false";</para></listitem></itemizedlist></listitem><listitem><para>Children:</para><itemizedlist>
<listitem><para><command>StyleName</command>: Der Name eines zuvor definierten <command>Style</command> (siehe <xref linkend="sec.Element-Style" />). Der hier angegebene Name muss existieren!</para></listitem><listitem><para><command>Datasource</command>: Definiert die Quelle der Kartendaten und enth&auml;lt Informationen wie diese ausgelesen werden k&ouml;nnen. Siehe <xref linkend="sec.Element.-Datasource" />.</para></listitem></itemizedlist></listitem></itemizedlist><para>Beispiel:</para><screen>
<![CDATA[<Layer name="coastlines" status="on" srs="+proj=merc +datum=WGS84 +k=1.0 +units=m +over +no_defs">
<StyleName>coast</StyleName>
<Datasource>
<Parameter name="type">shape</Parameter>
<Parameter name="file">coastline</Parameter>
</Datasource>
</Layer>
]]></screen></sect2><sect2 id='sec.Element-StyleName' >
<title>Element: <markup>StyleName</markup><!-- anchor id="sec.Element-StyleName" --></title>
<para>Innerhalb eines <command>Layer</command>-Elements muss mindestens ein <command>StyleName</command>-Element angegeben werden. Es k&ouml;nnen aber beliebig viele <command>StyleName</command>-Elemente in einem <command>Layer</command> angegeben werden. Definiert wird nur der Name eines zuvor bereits definierten <command>Style</command>. Der Name muss existieren!</para><itemizedlist>
<listitem><para>Element: <command>Style</command></para></listitem><listitem><para>Elementtyp: Name eines <command>Style</command></para></listitem><listitem><para>Attribute:</para><itemizedlist>
<listitem><para>Keine</para></listitem></itemizedlist></listitem></itemizedlist><para>Beispiel:</para><screen>
<![CDATA[<StyleName>style</StyleName>
]]></screen></sect2><sect2 id='sec.Element.-Datasource' >
<title>Element: <markup>Datasource</markup><!-- anchor id="sec.Element.-Datasource" --></title>
<para>Das Element <command>Datasource</command> definiert die Quelle, aus der die Karte gezeichnet werden soll.</para>
<para>&sportwatcher; verwendet intern <emphasis>Mapnik</emphasis> zum Zeichnen von Karten. Das beinhaltet mehrere Arten von Quellen. F&uuml;r jede der gew&uuml;nschten Quellen, muss ein entsprechendes <emphasis>Plugin</emphasis> vorhanden sein. Damit diese Bibliothek weis woher es die Daten zum Zeichnen der Karte nehmen soll, muss das definiert werden. Abh&auml;ngig von der Art der Quelle, m&uuml;ssen verschiedene Angaben gemacht werden.</para><itemizedlist>
<listitem><para>Element: <command>Datasource</command></para></listitem><listitem><para>Elementtyp: Definiert die Datenquelle des <command>Layer</command></para></listitem><listitem><para>Attribute:</para><itemizedlist>
<listitem><para>Keine</para></listitem></itemizedlist></listitem><listitem><para>Kinder</para><itemizedlist>
<listitem><para><command>Parameter</command>: Definiert einen Parameter welcher die Datenquelle spezifiziert (siehe <xref linkend="sec.Element-Parameter" />).</para></listitem></itemizedlist></listitem></itemizedlist></sect2><sect2 id='sec.Element-Parameter' >
<title>Element: <markup>Parameter</markup><!-- anchor id="sec.Element-Parameter" --></title>
<para>Definiert einen Parameter zur Spezifikation der Datenquelle f&uuml;r ein <command>Layer</command>.</para><itemizedlist>
<listitem><para>Element: <command>Parameter</command></para></listitem><listitem><para>Elementtyp: Parameterspezifikation f&uuml;r eine Datenquelle.</para></listitem><listitem><para>Attribute:</para><itemizedlist>
<listitem><para><command>name</command></para></listitem></itemizedlist></listitem></itemizedlist><sect3 id='sec.Datenquelle-PostGIS' >
<title>Datenquelle: PostGIS<!-- anchor id="sec.Datenquelle-PostGIS" --></title>
<para>Bei PostGIS handelt es sich um eine spezielle PostgreSQL-Datenbank, welche um Geofunktionen erweitert wurde. Die folgende Tabelle zeigt die notwendigen Definitionen um auf die Daten in einer solchen Datenbank zugreifen zu k&ouml;nnen.</para>
<informaltable><tgroup cols="2" colsep="1" rowsep="1">
<colspec colname="col0" align="left" />
<colspec colname="col1" align="left" />
<tbody>
<row>
<entry align="center" valign="top">Parameter</entry>
<entry align="center" valign="top">Bedeutung</entry>
</row>
<row>
<entry align="left" valign="top">host</entry>
<entry align="left" valign="top">Name des Computers im Netzwerk, auf dem die Datenbank l&auml;uft.</entry>
</row>
<row>
<entry align="left" valign="top">dbname</entry>
<entry align="left" valign="top">Name der Datenbank</entry>
</row>
<row>
<entry align="left" valign="top">user</entry>
<entry align="left" valign="top">Benutzername unter dem auf die Datenbank zugegriffen werden kann.</entry>
</row>
<row>
<entry align="left" valign="top">password</entry>
<entry align="left" valign="top">Das Passwort des users mit dem auf die Datenbank zugegriffen wird.</entry>
</row>
<row>
<entry align="left" valign="top">table</entry>
<entry align="left" valign="top">Name der Tabelle welche f&uuml;r eine Abfrage verwendet wird. Hier kann eine komplexe SQL-Abfrage angegeben werden, welche als erster Filter f&uuml;r das gesamte <command>Layer</command> fungiert.</entry>
</row>
<row>
<entry align="left" valign="top">estimate_extent</entry>
<entry align="left" valign="top">Die Fl&auml;che in Geokoordinaten, welche von der Datenquelle, und damit vom <command>Layer</command> abgedeckt wird.</entry>
</row>
<row>
<entry align="left" valign="top">extent</entry>
<entry align="left" valign="top">Standard: false; Wird dieser Wert auf &ldquo;true&rdquo; gesetzt, werden die Werte unter <command>estimate_extent</command> ber&uuml;cksichtigt. Andernfalls nicht.</entry>
</row>
</tbody>
</tgroup></informaltable></sect3><sect3 id='sec.Datenquelle-Shape-Datei' >
<title>Datenquelle: Shape-Datei<!-- anchor id="sec.Datenquelle-Shape-Datei" --></title>
<para>&sportwatcher; ist in der Lage Datenquellen nach dem <ulink url="http://de.wikipedia.org/wiki/ESRI">ESRI-Standard</ulink> zu verarbeiten. Es k&ouml;nnen s.g. <ulink url="http://de.wikipedia.org/wiki/Shapefile">Shapedateien</ulink> eingelesen werden und daraus Karten generiert werden. Im Internet gibt es verschiedene Quellen f&uuml;r Shapedateien und alle beinhalten unterschiedliche Felder. Tatsächlich handelt es sich bei einer Shapedatei nicht um eine Datei, sondern zumeist um drei bis vier Dateien. Deshalb wird die Dateierweiterung nicht angegeben, diese findet &sportwatcher; selbst. F&uuml;r eine Karte werden i.d.R. mehr als eine Shapedatei verwendet, da die einzelnen Komponenten einer Karte auf verschiedene Dateien aufgeteilt sind. Zumeist findet man eine Datei f&uuml;r Stra&szlig;en, eine f&uuml;r Fl&uuml;sse, eine f&uuml;r Punktobjekte u.s.w.</para>
<para>Wie bei einer Datenbank, besteht auch eine Shapedatei aus Datenfeldern. Es handelt sich also um Tabellen, wobei jede Shapedatei genau eine Tabelle ist. So wie bei Datenbanken, haben die einzelnen &ldquo;Spalten&rdquo; der Tabelle Namen. Im Gegensatz zu Datenbanken, spielt die Gro&szlig;-Kleinschreibung dabei ein wichtige Rolle. Insbesondere in der <command>Filter</command>-Anweisung (siehe <xref linkend="sec.Element-Filter" />) muss darauf geachtet werden.</para>
<informaltable><tgroup cols="2" colsep="1" rowsep="1">
<colspec colname="col0" align="left" />
<colspec colname="col1" align="left" />
<tbody>
<row>
<entry align="center" valign="top">Parameter</entry>
<entry align="center" valign="top">Bedeutung</entry>
</row>
<row>
<entry align="left" valign="top">file</entry>
<entry align="left" valign="top">Pfad und Dateiname der Shapedatei. Die Dateiendung darf nicht angegeben werden!</entry>
</row>
</tbody>
</tgroup></informaltable></sect3><sect3 id='sec.Datenquell-OSM' >
<title>Datenquelle: OSM<!-- anchor id="sec.Datenquell-OSM" --></title>
<para>OSM ist das Datenformat des <ulink url="http://www.openstreetmap.org">Open Street Map</ulink> Projekts, welches eine weltweite freie Landkarte zur Verf&uuml;gung stellt. OSM-Dateien sind selbst f&uuml;r kleine Gebiete sehr gro&szlig; und, da sie im XML-Format gespeichert sind, sehr langsam. Sie direkt mit &sportwatcher; zu verwenden ist m&ouml;glich, erfordert aber extrem schnelle Festplatten, wenn man innerhalb einer akzeptablen Zeit eine Landkarte sehen will. Das OSM-Format wurde entwickelt, um Landkarteninformationen transportieren zu k&ouml;nnen. Es ist daf&uuml;r gedacht, die Daten in eine Datenbank einzuspielen.</para>
<informaltable><tgroup cols="2" colsep="1" rowsep="1">
<colspec colname="col0" align="left" />
<colspec colname="col1" align="left" />
<tbody>
<row>
<entry align="center" valign="top">Parameter</entry>
<entry align="center" valign="top">Bedeutung</entry>
</row>
<row>
<entry align="left" valign="top">file</entry>
<entry align="left" valign="top">Pfad und Dateiname der OSM-Datei.</entry>
</row>
<row>
<entry align="left" valign="top">parser</entry>
<entry align="left" valign="top">Parser der zum Entschl&uuml;sseln der OSM-Datei verwendet werden soll. Hier wird derzeit nur "libxml2" unterst&uuml;tzt.</entry>
</row>
<row>
<entry align="left" valign="top">url</entry>
<entry align="left" valign="top">URL von der die OSM-Datei geladen werden soll. Wenn dieser Parameter angegeben wird, muss der Parameter <command>bbox</command> ebenfalls angegeben werden. Es handelt sich hierbei nicht um eine Vollst&auml;ndige URL, sondern lediglich um die Basis (z.B.: http://127.0.0.1:8800/tiledata)</entry>
</row>
<row>
<entry align="left" valign="top">bbox</entry>
<entry align="left" valign="top">Der "bounding-box" parameter, welcher zur URL hinzugef&uuml;gt werden soll. Es gibt kein bestimmtes Format f&uuml;r diesen Parameter, aber alles was hier steht wird nach einem "?bbox=" hinzugef&uuml;gt. Wenn also "bbox" gleich "115.136719,-31.802893,116.894531,-33.284620" ist und die URL "http://127.0.0.1:8800/tiledata" ist, dann ergibt das: http://127.0.0.1:8800/tiledata?bbox=115.136719,-31.802893,116.894531,-33.284620</entry>
</row>
</tbody>
</tgroup></informaltable></sect3></sect2></sect1></chapter><chapter id='cha.Credits' >
<title>Danksagung<!-- anchor id="cha.Credits" --></title>
<sect1 id='sec.Danksagung-und-Lizenz' >
<title>Danksagung und Lizenz<!-- anchor id="sec.Danksagung-und-Lizenz" --></title>
<para>&sportwatcher;</para>
<para>Programm <trademark class="copyright">Copyright </trademark> 2007 - 2009 bei Andreas Theofilu <email>andreas@theosys.at</email></para>
<para>Basierend auf <command>garmin-tools</command> von Dave Bailey <email>dave@daveb.net</email></para>
<para>Basierend auf <command>GANT</command> von Paul <email>paul@ant.sbrk.co.uk</email></para>
<!-- TRANS:CREDIT_FOR_TRANSLATORS -->
&underFDL; <!-- FDL: do not remove -->
&underGPL; <!-- GPL License --></sect1></chapter></book>