世界測地系平面直角座標と緯度経度を相互変換

平面直角座標で書かれた図面を緯度経度で表現する図面の上に配置するために平面直角座標と緯度経度を相互変換するためのRubyスクリプトを書いてみました。

Rubyは数行のスクリプトは書いたことがありましたが、この長さのものを書いたのは初めてです。
いくつかの場面でVBSやVisual Basic .NETよりも書きやすい部分がありました。

内容はかつて菰口恵さんという方が公開していたExcelアドインを参考にしながら国土地理院で公開されている計算式を解釈したものです。

現在まだ問題があり、DDMMSS.SSSSとして表現される緯度経度の小数第4位以下に誤差が起こります。今回書いたコードの254行目と255行目にある「sn - m」の計算結果で小数第10位あたりから計算結果が異なるために誤差が発生しているようです。
用途からするとその程度の誤差は問題ないのですが、せっかく書いたものなのでなんとかしておきたいなぁという感もあってどうやって問題を解決したらいいものか考え中だったりします。

とりあえず現在の状態をここらへんにおいておきます。
もし使用する際には計算結果が必ずしもただしくないことにご注意ください。
いや、そんなもの使わないか。

後日談アリ

いただいたコメントを元にスクリプトを更新しました。前のものも残っていますが新しいスクリプトはここらへんにあります。

別のスクリプト内で

require "cblxy"

を記述し、xybl(%X座標%,%Y座標%,%座標系%)として呼び出していただくとxybl[0]に緯度、xybl[1]に経度が返ってきます。
なんか使いづらいかなぁ…。

追記

思い出したので書き込んでおきます。
このスクリプトはいわゆる東日本大震災の後に設定された世界測地2011は考慮していないので、世界測地2011が適用される地域では正しい値が返ってこない可能性があります。もしかしたら正しい値が返ってくるかもしれません。

追記(2013年12月19日)

スクリプトの公開をGitHubに変更しました。
リポジトリcblxyです。