UTMゾーン番号の計算
はじめに
UTMゾーン番号は、UTM (https://ja.wikipedia.org/wiki/ユニバーサル横メルカトル図法) で、がっつり使いますが、ふと、ここのUTMゾーンで何番だったっけ?と思うことがあるかと思います(もしかしたら私だけかもしれませんがね)。
原則的には経度の割り算だけで計算できますが、若干特殊な計算が必要な部分があります。
通常の計算
経度をlon
、緯度をlat
とし、lon
は[-180, 180)の区間にあり、lat
は[-90, 90]の区間にあるとします。
ほとんどは次の式ですみます。
utmzone = fix((lon+180)/6) + 1;
ここで、fix()は、小数点を切り捨てる関数とします。Cならintにキャストしますし、JavaScriptならparseInt()を使うとOKですね。
特殊な計算
特殊な計算では、UTMゾーンを見るよりUTMグリッドを見た方が良いかと思います。
経度6度で区切って数字で表し(ゾーン番号)、そのあとに、緯度8度で区切って文字で表します。
たとえば、http://www.dmap.co.uk/utmworld.htm を見てみてください。
32V (6°E 56°N - 12°E 64°N)に注目して下さい。ノルウェーの西海岸をカバーするために、32Vが西に伸びているのが分かると思います。
また、31X-37Xにも注目してみてください。Xは 72°N-84°N です。32X, 34X, 36X が存在しません。また、31Xと37Xは同じ横幅で、33Xと35Xは同じですが、31X,37X と 33X,35X とは異なる横幅です。
ここで、https://en.wikipedia.org/wiki/Universal_Transverse_Mercator_coordinate_system#Exceptions を見てみましょう。
31Vの東側3°が32Vに入ると書かれています。また、31X, 33Xは、本来なら横幅が6°のところ9°であり、33Xと35Xの横幅は12°である、と書かれています。
もう少し整理すると、次のようになります。
V (56°N - 64°N)の調整
(3°E 56°N - 6°E 64°N)では31(V)から32に変更
X (72°N - 84°N)の調整
(6°E 72°N - 9°E 84°N)では32(X)から31に変更
(9°E 72°N - 12°E 84°N)では32(X)から33に変更
(18°E 72°N - 21°E 84°N)では34(X)から33に変更
(21°E 72°N - 24°E 84°N)では34(X)から35に変更
(30°E 72°N - 33°E 84°N)では36(X)から35に変更
(33°E 72°N - 36°E 84°N)では36(X)から37に変更
これらをプログラムとして書くと、たとえば次のようになります。
if( lat >= 56 && lat < 64 ) {
if( lon >= 3 && lon < 6 ) {
utmzone = 32;
}
}
else if( lat >= 72 && lat < 84 ) {
if( lon >= 6 && lon < 9 ) {
utmzone = 31;
}
if( lon >= 9 && lon < 12 ) {
utmzone = 33;
}
if( lon >= 18 && lon < 21 ) {
utmzone = 33;
}
if( lon >= 21 && lon < 24 ) {
utmzone = 35;
}
if( lon >= 30 && lon < 33 ) {
utmzone = 35;
}
if( lon >= 33 && lon < 36 ) {
utmzone = 37;
}
}
おわりに
UTMゾーン番号を計算してみました。たいしたことないと思います。特にわが国をカバーするだけで済むなら、単純な計算で済みます。
本記事のライセンス
この記事は クリエイティブ・コモンズ 表示 4.0 国際 ライセンス の下に提供されています。
Discussion