MPT.BINにmptutilを使う2

前回、読み込み件数が400件オーバーになってしまった反省をふまえて、自宅に近い順にデータを取り出して登録するようにする。

実行手順

400件であふれさせる前にバックアップしておいたMPT.BINをmptdecでデコードしてmpt.csvに出力

> mptdec MPT.BIN mpt.csv

オービスデータ中で北緯35度,東経135.7度の地点に近いデータから順に350件だけをmpt.csvにを追加

> ruby pot.rb 35 135.7 350 ovis0610.pot >> mpt.csv

mpt.csvをmptencでバイナリファイルにエンコードしてmpt.newに出力

> mptenc mpt.csv mpt.new

出来たmpt.newをSDの所定のフォルダにMPT.BINとしてコピー

> copy mpt.new e:\PRIVATE\MAPPOINT\MPT.BIN

pot.rb

上記で用いたpot.rbの中身
緯度の差の2乗+経度の差の2乗をキーにしてソートしてるので厳密には距離順じゃない
その関係で緯度経度情報を10進で持っているので、PDフラグ(位置情報指定フラグ)も3番の位置情報:TOKYO測地系&10進表記を使ってみた。

hy,hx,n,f = ARGV
open(f).map{|s|
  _,t,x,y,z = s.chop.split(/\/...=/)
  x,y = [x,y].map{|a|b,c,d,e = a.split(/'/).map{|s|s.to_f}
                     b + c/60 + d/3600 + e/36000}
  [x,y,z,t]
}.sort_by{|x,y|(x-hx.to_f)**2+(y-hy.to_f)**2}[0,n.to_i].each{|x,y,z,t|
  puts "#P,,0,3,#{y},,,,#{x},,,,0x85,#{(z.to_f/11.25).round%32},0xff,#{t},,,"
}