首都圏の鉄道駅の緯度経度を世界測地系に変換
首都圏の鉄道駅について、Google Maps で使用可能な世界測地系の緯度経度を取得することを目標とする。
1. 鉄道駅の緯度経度を取得
鉄道網の分析: 研究概要: 篠田 孝祐 から 駅情報データ を取得。篠田さん、ありがとう!
2. 世界測地系に変換
上のデータは日本測地系である。そのため世界測地系へ変換しなければならない。幸い、国土地理院が変換プログラムTKY2JGDを公開してくれている。ダウンロードして使う。1. のデータのフォーマットは「駅名・緯度・経度」の順にデータが並んでいるが、このソフトは「緯度・経度・駅名」の順にしかデータを受け付けないので、変換フィルタを Ruby で書いた。
STDIN.each do |line| next if line =~ /^#/ items = line.split(/\s+/) print items[2].gsub('.', ''), ' ', items[3].gsub('.', ''), ' ', items[1], "\n" end
3. 10進数表記に変換
さてこうして世界測地系に変換はできたが、問題がある。このデータは「〜度〜分〜秒」という形式のデータで、Google Maps に食わせるには、10進数に変換しなければならない。基本的には、時間と考え方は同じ。たとえば「1時間25分33秒」は何時間か?という問題を考えてみればいい。この場合 1 + 25/60 + 33/3600 = 1.42583333333333 時間ということになる。そこで作ったのが次のスクリプト。
def d60_to_d10(num_str) a, b = num_str.split('.') r = a[0, a.size - 4].to_f + a[-4, 2].to_f / 60.0 + "#{a[-2, 2]}.#{b}".to_f / 3600.0 end STDIN.each do |line| items = line.split(/\s+/) print items[3], "\t", d60_to_d10(items[1]), "\t", d60_to_d10(items[2]), "\n" end
これで完了。めでたしめでたし。