KML形式のGPSデータを整形する

Googleマップから座標をKML形式でダウンロードしたのですが、<Style>やら</Icon>やら余計な文字がいっぱいで、どこを読めばよいのかわかりません。

しばらく眺めているうちに、これがxmlであることに気付きました。ならば、 xmlのmysqlへの登録 で使用した xpath の出番です。

KML形式のGPSデータは、ざっくり言えば以下のようなツリー形式となっているようです。

f:id:S_E_Hyphen:20171209104034j:plain

そこで次のシェルスクリプトで、測点名、経度、緯度を列挙したファイルに変換することが可能となりました。

 

#!/bin/bash
infile=xxxx.kml

#Folder[1]中のPlacemarkの総数をnpに代入する
np=`
cat $infile |\
xpath -e "//Folder[1]" 2>/dev/null  |\
xpath -q -e "count((//Placemark))" 2>/dev/null `

declare -a name coord

for (( i=1; i<=$np ;i++ ))
do
# 各Placemark中のname要素を取得する
 name[$i]=`
  cat $infile |\
  xpath -e "//Folder[1]" 2>/dev/null  |\
  xpath -q -e "//Placemark[$i]" 2>/dev/null |\
  xpath -q -e "//name/text()" 2>/dev/null`

# 各Placemark中のPoint要素中のcoordinatesを取得する
# sed を使って読みやすいように整形する
 coord[$i]=`
  cat $infile |\
  xpath -e "//Folder[1]" 2>/dev/null  |\
  xpath -q -e "//Placemark[$i]" 2>/dev/null |\
  xpath -q -e "//Point" 2>/dev/null |\
  xpath -q -e "//coordinates/text()" 2>/dev/null |\
  sed -e "s/ //g" |\
  sed -e "s/,/ /g"`
  
echo $i ${name[$i]} ${coord[$i]}
done