Logo

FreieTonne

Forum Kontakt Seekarte Logbuch Download Windows Download Linux Download Mac Download Mobilgeräte Menu

Rules.XML

Hier die Details zu den Filter-Regeln für den OSM-Konverter der FreienTonne (ähnlich dem eines Renderers).

Prüfung
Der OSM-Konverter prüft beim Programmstart die Rules-Datei, und alle enthaltenen Regeln. Alle enthaltenen Fehler werden in der Datei "osmkonverter.log" eingetragen. Das Programm beendet sich im Fehlerfall.

Elemente
In rot gekennzeichnete Elemente sind Pflichtangaben, und müssen (mindestens einmal) vorhanden sein. Alle beschriebenen Parameter zu den Elementen sind ebenfals Pflicht. Wenn Sie also ein Element verwenden, und dieses Parameter besitzt, müssen Sie diese alle angeben und definieren.


<filter> Grundobjekt, welches alles andere enthält

Parameter: keine

Kind von: -

Anzahl: einmalig

<globalrule> Enthält globale Regeln für <ignore>'s und Funktionen, welche allen <rule>'s hinzugefügt werden.

Parameter: keine

Kind von: <filter>

Anzahl: einmalig

<ignore> Tag-Definition(en) um einen Node auszuschließen

Parameter: k=; v=
müssen einen Wert haben, und entsprechen key/ value von OSM-Tags
einer von beiden kann auch * annehmen (WILDCARD)

Kind von: <globalrule>

Anzahl: beliebig (ODER-Verknüpfung)

<rule> Enthält Regeln zur Symbolbestimmung & Funktionen

Parameter: keine

Kind von: <filter>

Anzahl: beliebig

<condition> Tag-Definition(en) um einen Node zu identifizieren

Parameter: k=; v=
entsprechen dem zu identifizierenden Tag von OSM (key & value)
v kann auch Sternchen * annehmen (WILDCARD)
v kann auch mehrere Möglichkeiten haben, mit | getrennt (ODER)

Kind von: <rule>

Anzahl: beliebig (UND-Verknüpfung)

<ident> Symbol-ID von FreieTonne des identifizierten Nodes (zutreffende condition(s))

Parameter: ftsym=
enthält die Symbol-ID der FreienTonne

Kind von: <rule>

Anzahl: einmalig

<add> Fügt einen Tag nachträglich hinzu

Parameter: k=; v=
müssen einen Wert haben, und entsprechen key/ value von OSM-Tags

Kind von: <rule>, <globalrule>

Anzahl: beliebig

<remove> Entfernt einen originalen Tag

Parameter: k=; v=
müssen einen Wert haben, und entsprechen key/ value von OSM-Tags
einer von beiden kann auch * annehmen (WILDCARD)

Kind von: <rule>, <globalrule>

Anzahl: beliebig

<replace> Ändert einen originalen Tag

Parameter: k=; v=; nk=; nv=
k/v müssen einen Wert haben, und entsprechen key/ value von OSM-Tags
nk/nv müssen einen Wert haben, und entsprechen dem neuen key/ value von OSM-Tags
Einer von beiden Paaren kann jeweils auch * annehmen (WILDCARD)
Bedeutet bei k oder v: Zur Identifizierung spielt dieser Wert keine Rolle
Bedeutet bei nk oder nv: Der Originalwert von vorher wird übernommen

Kind von: <rule>, <globalrule>

Anzahl: beliebig


Reihenfolgen

Die Reihenfolge der unter <rule> und unter <globalrule> eingetragenen Elemente spielt keine Rolle.

Die Reihenfolge der <rule>'s ist entscheidend. Sollten mehrere "rules" auf einen Node zutreffen, so wird die erste gefundene und zutreffende "rule" als gültig angenommen. Das bedeutet für OSM-Maßstäbe, dass die Rules mit den meißten Conditions oben stehen müssen. Ein Beispiel:

Ein Node mit den Tags
<tag k="buoy" v="green">
<tag k="light" v="yes">

Zuerst muss also die Rule für beide Conditions stehen (buoy & light), damit Sie als leuchtende Tonne identifiziert wird. Erst danach kann nach einer einzelnen Condition gefragt werden (buoy). Andersherum würden alle grünen Tonnen kein Licht haben, da die erste "rule" immer zutrifft.

Sollten mehrere Rules mit gleicher Anzahl von Conditions auf einen Node zutreffen, wird die Regel genommen, welche als erstes steht. Bei unseren Auto-Rules stehen bei den Rules mit gleicher Anzahl Conditions, jene der FreienTonne zuerst.

Gewichtung der Identifikations-Elemente
  1. Wenn die Datei "osmids.log" vorliegt, wird jeder Node ausgeschlossen, dessen ID in der Datei enthalten ist, und eine ältere / gleiche Versionsnummer besitzt. Alle nachfolgenden Prozesse werden vernachlässigt.

  2. Der Node wird ausgeschlossen, sobald dieser EINEN einzigen der möglichen mit "ignore" angegebenen Tags enthält (ODER-Verknüpfung). Alle nachfolgenden Prozesse werden vernachlässigt.

  3. Wenn die Datei "osmids.csv" vorliegt, wird jeder Node aufgenommen, dessen ID in der Datei enthalten ist, und eine neuere Versionsnummer besitzt. Angegebene "conditions" werden zwar noch zur Symbol-Identifikation genutzt, aber entscheiden nicht mehr über Aufnahme oder Ausschluß.

  4. Der Node wird aufgenommen, wenn nicht bereits ausgeschlossen oder aufgenommen, UND ALLE Tags enthält, welche durch die "condition"s  beschrieben wurden (UND-Verknüpfung).
Die Elemente "add", "remove" und "replace" werden erst danach angewandt, und beeinflussen nicht die eben beschriebenen Vorgänge.

Gewichtung der Bearbeitenden Elemente
  1. Zuerst werden alle zu entfernenden Tags <remove> des Nodes entfernt.
  2. Danach werden Ersetzungen <replace> durchgeführt,
  3. und zum Schluß werden neue Tags <add> angehangen.
Beispieldatei (mit allen möglichen Kombinationen):
<?xml version="1.0" encoding="UTF-8" ?>
<filter>

   <globalrule>
      <ignore k="key" v="wert" />
      <ignore k="*"   v="wert" />
      <ignore k="key" v="*" />
      <ignore k="tagged_by" v="Olaf Hannemann" />
      <add k="key" v="wert" />
      <remove k="key" v="wert" />
      <replace k="key" v="wert" nk="key-neu" nv="wert-neu" />
   </globalrule>

   <rule>
      <condition k="key1" v="wert1" />
      <condition k="key2" v="wert2" />
      <condition k="key3" v="*" />              <!-- Hauptsache Key stimmt -->
      <condition k="key4" v="a|b|c" />         <!-- Wenn v entweder "a", "b" oder "c" annimmt -->
      <ident ftsym="1" />

      <add k="key" v="wert" />

      <remove k="wert" v="wert" />     <!-- Löscht alle mit gleichem Key UND Value -->
      <remove k="wert" v="*" />          <!-- Löscht alle mit gleichem Key -->
      <remove k="*"    v="wert" />       <!-- Löscht alle mit gleichem Value -->

<!-- Benötigt werden vorherige Werte (k,v) für die Auswahl,
           und zukünftige (nk,nv) welche vorherige ersetzen.
           Statt "wert" kann auch ein * (Wildcard) eingesetzt werden
           Bei k und n ist derjenige mit Stern dann unbedeutend für die Auswahl -->
      <replace k="wert" v="wert"   nk="wert" nv="wert" />
      <replace k="wert" v="*"      nk="wert" nv="wert" />
      <replace k="*"    v="wert"   nk="wert" nv="wert" />

<!-- Ein Stern bei nk oder vk bedeutet, das der ursprüngliche Wert übernommen wird -->
      <replace k="wert" v="wert"   nk="*"    nv="wert" />
      <replace k="wert" v="wert"   nk="wert" nv="*" />
      <replace k="wert" v="*"      nk="*"    nv="wert" />
      <replace k="wert" v="*"      nk="wert" nv="*" />
      <replace k="*"    v="wert"   nk="*"    nv="wert" />
      <replace k="*"    v="wert"   nk="wert" nv="*" />
   </rule>

   <rule>
      <condition k="key3" v="wert3" />
      <ident ftsym="2" />
   </rule>

</filter>