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    

嚥下障害 ~栗甘露煮~

栗甘露煮の瓶詰めを買ってきて、ミキサーで撹拌してみました。

栗きんとんのようなものを期待していたのですが、もう少し粒状のものが残ってしまいました。

f:id:S_E_Hyphen:20171205110412j:plain

AWKによる時刻列の付加

10Hzでサンプリングされた計測データの時系列observed.txtが有ります。

-1.2272064388e-01
6.5884366632e-03
1.5742965043e-01
2.7226161957e-01
3.1432914734e-01
2.7226161957e-01
1.5742965043e-01
6.5884534270e-03
-1.2272065133e-01
-1.7943170667e-01
-1.5418088436e-01
-8.6262218654e-02
-2.9445931315e-02
-8.7659284472e-03
-1.0812029243e-02
-2.2155188024e-01
-3.1715303659e-01
-2.1832183003e-01
1.0541967303e-01
4.8117116094e-01
6.4801311493e-01
4.8117113113e-01
1.0541968048e-01
-2.1832181513e-01
-3.1715306640e-01
-2.2155188024e-01
-8.3830565214e-02
-1.6459558159e-02
-1.8891192973e-02
-3.1877607107e-02

この1行目の計測時刻はファイル名やヘッダー情報などから2017年11月29日9時18分04秒であると分かっているとします。

このデータの1列目に各行の計測時刻を付け加えるためには、

#!/bin/bash
# 時系列データに時刻列を付加する
start_time="2017-11-29 9:18:04"
freq=10

# start_timeをエポック秒に変換する
epoch=`date -d "${start_time}" +'%s'`

cat observed.txt|\
awk --assign freq="$freq" epoch="$epoch"\
'{printf "%s.%03d %s\n",\
 strftime("%FT%H:%M:%S",epoch+(NR-1)/freq),\
 ((NR-1)*1000/freq)%1000,\
 $1}'

とします。dateコマンドで%sフォーマットを指定すると、2017年11月29日9時18分04秒のエポック秒が得られます。エポック秒というのは1970年年頭からの経過秒数だか何かだったと思いますが、このエポック秒を第2引数としてstrftime()という関数がawkの中で使用できます。

ただし小数点以下の秒は表示出来ないため

( (NR-1)*1000/freq )%1000 

 を使用して別途小数点以下の秒数を計算しています。ここで1000としてるのは、フォーマット文で"%03d"(ゼロ詰め三桁)を指定しているからで、マイクロ秒まで表示したい場合は1,000の代わりに1,000,000として"%06d"を指定して下さい。

f:id:S_E_Hyphen:20171129091350p:plain

ただし、strftimeが使用できるのはgawkだけだそうです。同じawkをインストールしているものと思い込んでいたので、テスト機で上手くいったのに実機でエラーが出て唖然としました。

manを叩けばよかったのですが、テスト機がgawk、実機がoriginal-awkをインストールしていることに気付くまで暫く時間がかかってしまいました。

蒸し蒲鉾

2017年11月4日の記事 いわしのすり身  で「ツミレ以外の何かに似ているなぁ」と考えていたのですが「じゃこ天」でした。

油を使った天ぷらは大変ですが、ミキサーで作成した鰯のすり身を圧力鍋で蒸すだけでも、相当美味しい蒸し蒲鉾が作れます。

  

f:id:S_E_Hyphen:20171126110904j:plain

 

すり身の重量に対して約2%の塩と、大さじ1杯の日本酒を加えました。塩分は少し多めかも知れませんので、お好みで減らして下さい。

これを耐熱性のお皿に盛り付けて圧力鍋で5分間蒸しました。

f:id:S_E_Hyphen:20171126111059j:plain

ご飯のおかずにも、お酒の肴にも合う蒸し蒲鉾の出来上がりです。実はうどんのトッピングにしても、とても美味しいのです。