Ruby on GeoTools で距離計算 1
Ruby on GeoTools を使って、2点間の直線距離を計算してみます。
地球は回転楕円体なので、距離の計算は単純ではありません。「直線距離」の定義すら明確とは言えません。一般的には、平面に投影したときのユークリッド距離(いわゆる、地図上の距離)あるい回転楕円体の表面に沿った距離(たぶん、大圏距離と言うと思う)がよく使われます。通常、標高差による傾斜などは考慮しないようです。
このあたりの詳細を、geotools.rb を使いながら実験的に理解していきたいと思っています。
距離を測る2点は
渋谷のハチ公とつくば市のエキスポセンターの H-II ロケットとします。
経緯度の計測は
Safari でも使える、電子国土地図を使います。
地図の真ん中に十字が出てくる、いわゆる Limited 版モードで、その十字に目標物を当てて、右下にある「座標」という緑色のボタンを押せば、その場所の経緯度が表示されます。実際にやってみたところ、
- 渋谷のハチ公
- 北緯35度39分32.44秒、東経139度42分2.3秒
- つくば市のエキスポセンターの H-II ロケット
- 北緯36度5分10.43秒、東経140度6分40.7秒
となりました。しかし、IT 的には経緯度は度分秒ではなくて度(十進経緯度, decimal degree と呼ぶことが多いようです)で表示することが多いので、度分秒から十進度への変換をする必要があります。この変換は、geotools.rb に用意した、Geo::dms2dec を使います:
$ irb irb(main):001:0> require 'geotools' DEBUG: rjb primitive_conversion mode => true irb(main):002:0> Geo::dms2dec(35, 39, 32.44) => 35.6590111111111 irb(main):003:0> Geo::dms2dec(139, 42, 2.3) => 139.700638888889 irb(main):004:0> Geo::dms2dec(36, 5, 10.43) => 36.0862305555556 irb(main):005:0> Geo::dms2dec(140, 6, 40.7) => 140.111305555556 irb(main):006:0>
ということで、2点の十進経緯度が分かりました:
地点名 | 経度 | 緯度 |
渋谷のハチ公 | 139.700638888889 | 35.6590111111111 |
つくば市のエキスポセンターの H-II ロケット | 140.111305555556 | 36.0862305555556 |
この情報が正しいかどうか、はてなの map記法 を使って検証(クロスチェック?)することができます:
map記法では今のところ縮尺を指定できないようですので、[+] ボタンを使って地図を拡大していただく必要がありますが、位置はかなり良く合っているようです。電子国土地図で閲覧した地図は 1:25,000 相当ですので、規定精度の10メートル台のずれがありますから、このくらいのずれがあるのは仕様、となります。
このエントリの信頼性について
このエントリの内容には誤りがあるかもしれません。