x

Tags aus OSM Datei vermischen


  1. Tags aus OSM Datei vermischen · unixasket (Gast) · 26.02.2013 11:32 · [flux]

    Hallo,

    ich habe mit der Overpass API bestimmte Nodes aus OSM extrahiert um diese als Garmin GPI Datei aufzubereiten. Darunter ist auch eine OSM Datei mit Berggipfeln. In den OSM Tags stehen nun natürlich Name und Höhe getrennt. Wenn ich diese Datei mit gpsbabel ins Garmin GPI Format wandle, dann stehen nur die Namen als Namen des POI drin. Ich hätte aber gerne auch die Höhe. Gibt es daher ein Tool mit dem ich OSM-Tags nach Regeln vermischen kann, mit dem ich also aus:

    <tag␣k="ele"␣v="972"/>
    <tag␣k="name"␣v="Nußhardt"/>
    

    einfach:

    <tag␣k="name"␣v="Nußhardt,␣972M"/>
    

    machen kann?

    Gruß
    unixasket


    • Re: Tags aus OSM Datei vermischen · toc-rox (Gast) · 26.02.2013 13:55 · [flux]

      Wir machen genau das mit einer erweiterten Version von osmfilter.
      Es sollte aber auch mit tag_transform gehen ...

      Gruß Klaus


    • Re: Tags aus OSM Datei vermischen · unixasket (Gast) · 26.02.2013 14:24 · [flux]

      toc-rox wrote:

      Wir machen genau das mit einer erweiterten Version von osmfilter.

      Was heißt erweiterten Version? Gibt es die irgendwo zum runterladen?

      toc-rox wrote:

      Es sollte aber auch mit tag_transform gehen ...

      OK, grade gelesen das dies ein osmosis Plugin ist. Also muß ich mich erst mit osmosis beschäftigen.

      Gruß
      unixasket


    • Re: Tags aus OSM Datei vermischen · wambacher (Gast) · 26.02.2013 14:38 · [flux]

      unixasket wrote:

      OK, grade gelesen das dies ein osmosis Plugin ist. Also muß ich mich erst mit osmosis beschäftigen.

      wird auch langsam Zeit 😉

      Im Ernst: osmosis soll das mit dem Plugin können - ich bin aber mehrfach daran gescheitert, dieses Plugin zum Rennen zu bekommen. Es gibt (oder gab) da anscheinend eine sehr starke Abhängigkeit zwischen den Versionen. Du musst wirklich das zum aktuellen Osmosis genau passende Plugin benutzen, dann hast du ne Chance.
      Ich hab zumindest letztes Jahr kapituliert. Wenn's klappt, kast du dich ja mal melden.

      Gruss
      walter

      nachtrag: gerade mal geprüft. Bei osmosis 0.42 ist das Plugin bereits dabei "osmosis-0.42/lib/default/osmosis-tagtransform-0.42.jar". Das fehlte noch bei der 0.41 und musste nachinstalliert werden.


    • Re: Tags aus OSM Datei vermischen · Oli-Wan (Gast) · 26.02.2013 14:54 · [flux]

      Und wenn's mit osmosis nicht klappen sollte, hier der Weg mit GNU Emacs.

      (dolist␣(x␣(osm-objects-from-file␣"input.osm"))
      (if␣(and␣(osm-obj-tag␣x␣"name")
      (osm-obj-tag␣x␣"ele"))
      (progn␣(osm-obj-modify-tag␣x␣"name"
      (concat␣(osm-obj-tag␣x␣"name")␣",␣"
      (osm-obj-tag␣x␣"ele")␣"␣m"))))
      ;;␣output␣...
      )
      

      Das benötigte OSM-Paket gibt's im Bedarfsfall bei mir. Allerdings sind die Ausgabefunktionen primär darauf getrimmt, den API-Server zu füttern. Ob die XML-Ausgabe schon ein dateitaugliches Format ausliefern kann, weiß ich gerade selbst gar nicht (deshalb die Kommentarzeile ";; output ...").


    • Re: Tags aus OSM Datei vermischen · Netzwolf (Gast) · 26.02.2013 16:01 · [flux]

      Nahmd,

      unixasket wrote:

      mit dem ich also aus:

      <tag␣k="ele"␣v="972"/>
      <tag␣k="name"␣v="Nußhardt"/>
      

      einfach:

      <tag␣k="name"␣v="Nußhardt,␣972M"/>
      

      machen kann?

      Wenn das Format Deiner Daten, insbesondere die Verwendung des Doppelquotes (") sich nicht ändert und Du ein Element für eine Pipeline braucht, kannst Du ein winziges Perl-Script benutzen:

      #!/usr/bin/perl
      use␣strict;
      my␣%T;
      while␣(<>)␣{
      #-----------------------------------------------------------
      #␣␣␣␣␣␣␣Speichere␣Tag.
      #-----------------------------------------------------------
      
      if␣(m#^\s*<tag\s+k="([^"]*)"\s+v="([^"]*)"\s*/>\s*$#)␣{
      $T{$1}=$2;
      next;
      }
      
      #-----------------------------------------------------------
      #␣␣␣␣␣␣␣Gib␣tagfreie␣Zeile␣aus,␣wenn␣keine␣Tags␣gespeichert
      #-----------------------------------------------------------
      
      if␣(!%T)␣{
      print␣$_;
      next;
      }
      
      #-----------------------------------------------------------
      #␣␣␣␣␣␣␣Manipuliere␣die␣Tags
      #-----------------------------------------------------------
      
      if␣($T{'name'}␣&&␣$T{'ele'})␣{
      
      $T{'name'}␣=␣$T{'name'}␣.␣",␣"␣.␣int($T{'ele'})␣.␣'m';
      }
      
      #-----------------------------------------------------------
      #␣␣␣␣␣␣␣Gib␣die␣gespeicherten␣und␣manipulierten␣Tags␣aus.
      #-----------------------------------------------------------
      
      for␣my␣$key␣(sort␣keys␣%T)␣{
      print␣"<tag␣k=\"$key\"␣v=\"$T{$key}\"/>\n";
      }
      %T=();
      
      #-----------------------------------------------------------
      #␣␣␣␣␣␣␣Gib␣die␣tagfreie␣Zeile␣aus.
      #-----------------------------------------------------------
      
      print␣$_;
      }
      __END__
      

      Das Teil ist strunzdumm und weiß nicht einmal, wie man XML schreibt. Aber es kann Tags manipulieren.

      Gruß Wolf


    • Re: Tags aus OSM Datei vermischen · unixasket (Gast) · 26.02.2013 21:01 · [flux]

      @Netzwolf: Absolut cool 😎 dein Perl-Script. Herzlichen Dank. Habe es gerade ausprobiert, scheint zu funktionieren.

      Schöne grüße
      unixasket


    • Re: Tags aus OSM Datei vermischen · wambacher (Gast) · 26.02.2013 22:18 · [flux]

      unixasket wrote:

      Habe es gerade ausprobiert, scheint zu funktionieren.

      Hast du das etwa angezweifelt? Das hab ich mir bei seinen Tips schon lange abgewöhnt 😉

      Gruss
      walter


    • Re: Tags aus OSM Datei vermischen · geodreieck4711 (Gast) · 26.02.2013 23:06 · [flux]

      Auch eine Mölichkeit bietet ein XLST auf die gefilterten Daten bzw über overpass.api erhaltenen Daten angewendet:

      <?xml version="1.0"?>

      <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
      <xsl:output indent="yes" method="xml"/>

      <xsl:template match="/">
      <xsl:apply-templates />
      </xsl:template>

      <xsl:template match="@*|*|processing-instruction()|comment()">
      <xsl:copy>
      <xsl:apply-templates select="@*|node()"/>
      </xsl:copy>
      </xsl:template>

      <xsl:template match="tag[@k='name']">
      <xsl:element name="tag">
      <xsl:attribute name="k">name</xsl:attribute>
      <xsl:attribute name="v">
      <xsl:value-of select="@v"/>
      <xsl:text> (</xsl:text>
      <xsl:value-of select="../tag[@k='ele']/@v"/>
      <xsl:text>)</xsl:text>
      </xsl:attribute>
      </xsl:element>
      </xsl:template>
      </xsl:stylesheet>

      danach sollte das name-tag den Gipfelnamen und die Höhe in Klammern enthalten.......


    • Re: Tags aus OSM Datei vermischen · wambacher (Gast) · 26.02.2013 23:19 · [flux]

      geodreieck4711 wrote:

      Auch eine Möglichkeit bietet ein XLST auf die gefilterten Daten bzw über overpass.api erhaltenen Daten angewendet:

      Das ist mMn der -einzig- richtige Weg, mit xml-Daten umzugehen. Durch einen xslt-Prozessor jagen und dem die Arbeit überlassen. Ich mach sowas gelegentlich mit Xalan, hatte heute aber nur wenig Zeit, das Filter zu schreiben.

      Danke
      walter

      p.s. Das teil kommt natürlich in meine "Sammlung". Kann man immer gut gebrauchen.


    • Re: Tags aus OSM Datei vermischen · mmd (Gast) · 02.03.2013 09:40 · [flux]

      .


    • Re: Tags aus OSM Datei vermischen · quasilotte (Gast) · 02.03.2013 10:10 · [flux]

      Jetzt kommt noch das 101 Problem!

      Ich erstelle ganz normal eine Garmin IMG

      mit den üblichen Tools: splitter.jar [mit --overlap=0 !!!] und mkgmap.jar

      Natürlich mit angepassten Regeln

      die jage ich durch http://www.glopus.de/tools/ExportPOI.zip

      Das Programm spuckt nun alle POI's die in der IMG sind als ASC-Datei aus.

      Dann muß ich nur noch die ASC umbennenen - (gibt die POI's mit der HEXnummern aus die in den Rgelen (points) festgelegt wurden).

      Und aus einer ASC das geweilige Format zu konvertieren ist nur noch formsache!
      Es lassen sich auch noch aus der ASC dieverse Bereiche ausschneiden so das man nur 1mal z.B ganz Deuschland erstellen muß und sich jenach diverse Bereiche ausscheiden kann.