Script awk : mkl2gpx

Je fais de la capture de parcours avec OSMtracker.
Les fichiers obtenus sont au format XML GPX. J’ai trouvé une série d’outils me permettant de réaliser des tracés et quelques statistiques. Et je saisie le cas échéant les chemins manquant dans Open Street Map (OSM!).

Lors d’une de mes sorties, c’est un ami qui a réalisé la capture GPS. Le fichier obtenu est un KML, aussi en XML.
En regardant le contenu, c’est la même chose que le GPX écrit différemment.
Du coup, j’ai réalisé ce petit script pour réaliser le travail.

L’unique astuce du script est

 FS = "[> <]" 

qui permet d’avoir le signe > et < en séparateur de champ.

BEGIN {
  print "<?xml version=\\"1.0\\" encoding=\\"UTF-8\\" ?>"
  print "<gpx xmlns=\\"http://www.topografix.com/GPX/1/1\\" version=\\"1.1\\" creator=\\"KML convertor\\" xmlns:xsi=\\"http://www.w3.org/2001/XMLSchema-instance\\" xsi:schemaLocation=\\"http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd \\">"
  print "	<trk>"
  print "		<name>"FILENAME"</name>"
  print "		<trkseg>"
  FS = "[> <]"
  capture  = 0
  DEBUG = 0
  reduce = 2
  count = 0
}

( $2 == "gx:Track" ) {
  capture = 1
  next
}

/when/ {
  time = $3
  if(DEBUG){
    for(i = 1; i <= NF; ++i) {
      printf("%s %s  :  ", i, $i)
    }
    printf("\\n")
  }
}

( /gx:coord/ && capture == 1) {
  lon = $3
  lat = $4
  alt = $5
  count ++
  if( count == reduce ) {
    print "			<trkpt lat=\\""lat"\\" lon=\\"" lon "\\">"
    print "				<ele>"alt"</ele>"
    print "				<time>"time"</time>"
    print "			</trkpt>"
    count = 0
  }
  if(DEBUG){
    for(i = 1; i <= NF; ++i) {
      printf("%s %s  :  ", i, $i)
    }
    printf("\\n")
  }
  next
}




END {
  print "		</trkseg>"
  print "	</trk>"
  print"</gpx>"
}

Pour l'utiliser :

awk -f kml2gpx.awk in.kml > out.gpx
Vus : 1405
Publié par Boutor : 56