XYZタイルの経緯度矩形の計算
XYZタイルの経緯度矩形をRubyで計算するコードを共有します。はてなブログでうまくはてな記法が乗らないので、久しぶりにはてなダイアリーへの投稿です。
XYZタイルの仕様は、Slippy map tilenames - OpenStreetMap Wiki に記載されています。ここからロジックを抜き出して Ruby で表現するだけの簡単な作業を行ったところ、以下のような感じです。
# tile2wgs.rb CC0 def x2lng(x, n) 360.0 * x / n - 180.0 end def y2lat(y, n) rad = Math::atan(Math::sinh(Math::PI * (1 - 2.0 * y / n))) rad * 360.0 / (2 * Math::PI) end def tile2wgs(z, x, y) n = 2 ** z lngr = x2lng(x, n)..x2lng(x + 1, n) latr = y2lat(y + 1, n)..y2lat(y, n) [lngr, latr] end # test p tile2wgs(2, 1, 1)
実行例
$ ruby tile2wgs.rb [-90.0..0.0, 0.0..85.05112877980659]
できれば、こういった完全な車輪の再発明はしたくないところですが...