Module: GeoDelta::Projector
- Defined in:
- lib/geodelta/projector.rb
Constant Summary collapse
- DEG2RAD =
度をラジアンに変換するための係数
Math::PI / 180.0
- RAD2DEG =
ラジアンを度に変換するための係数
180.0 / Math::PI
- DELTA_HEIGHT =
一辺を1.0とする正三角形の高さ
Math.sqrt(0.75)
Class Method Summary collapse
-
.lat_to_my(lat) ⇒ Object
緯度をメルカトルY座標に変換する -90.0 <= lat <= 90.0 -1.0 <= my <= 1.0.
- .lat_to_ny(lat) ⇒ Object
- .latlng_to_nxy(lat, lng) ⇒ Object
-
.lng_to_mx(lng) ⇒ Object
経度をメルカトルX座標に変換する -180.0 <= lng <= 180.0 -1.0 <= mx <= 1.0.
- .lng_to_nx(lng) ⇒ Object
-
.mx_to_lng(mx) ⇒ Object
メルカトルX座標を経度に変換する -1.0 <= mx <= 1.0 -180.0 <= lng <= 180.0.
-
.mx_to_nx(mx) ⇒ Object
メルカトルX座標から正規化X座標に変換する -1.0 <= my <= 1.0 -12.0 <= ny <= 12.0.
-
.my_to_lat(my) ⇒ Object
メルカトルY座標を緯度に変換する -1.0 <= my <= 1.0 -90.0 <= lat <= 90.0.
-
.my_to_ny(my) ⇒ Object
メルカトルY座標から正規化Y座標に変換する -1.0 <= my <= 1.0 -12.0 <= ny <= 12.0.
- .nx_to_lng(nx) ⇒ Object
-
.nx_to_mx(ny) ⇒ Object
正規化X座標からメルカトルX座標に変換する -12.0 <= ny <= 12.0 -1.0 <= my <= 1.0.
- .nxy_to_latlng(nx, ny) ⇒ Object
- .ny_to_lat(ny) ⇒ Object
-
.ny_to_my(my) ⇒ Object
正規化Y座標からメルカトルY座標に変換する -12.0 <= ny <= 12.0 -1.0 <= my <= 1.0.
Class Method Details
.lat_to_my(lat) ⇒ Object
緯度をメルカトルY座標に変換する
-90.0 <= lat <= +90.0
-1.0 <= my <= +1.0
12 13 14 |
# File 'lib/geodelta/projector.rb', line 12 def self.lat_to_my(lat) return Math.atanh(Math.sin(lat * DEG2RAD)) / Math::PI end |
.lat_to_ny(lat) ⇒ Object
67 68 69 |
# File 'lib/geodelta/projector.rb', line 67 def self.lat_to_ny(lat) return self.my_to_ny(self.lat_to_my(lat)) end |
.latlng_to_nxy(lat, lng) ⇒ Object
83 84 85 86 87 88 |
# File 'lib/geodelta/projector.rb', line 83 def self.latlng_to_nxy(lat, lng) return [ self.lng_to_nx(lng), self.lat_to_ny(lat), ] end |
.lng_to_mx(lng) ⇒ Object
経度をメルカトルX座標に変換する
-180.0 <= lng <= +180.0
-1.0 <= mx <= +1.0
19 20 21 |
# File 'lib/geodelta/projector.rb', line 19 def self.lng_to_mx(lng) return lng / 180.0 end |
.lng_to_nx(lng) ⇒ Object
71 72 73 |
# File 'lib/geodelta/projector.rb', line 71 def self.lng_to_nx(lng) return self.mx_to_nx(self.lng_to_mx(lng)) end |
.mx_to_lng(mx) ⇒ Object
メルカトルX座標を経度に変換する
-1.0 <= mx <= +1.0
-180.0 <= lng <= +180.0
33 34 35 36 37 |
# File 'lib/geodelta/projector.rb', line 33 def self.mx_to_lng(mx) mx = (mx % 2.0) - 2.0 mx += 2.0 if mx < -1.0 return mx * 180.0 end |
.mx_to_nx(mx) ⇒ Object
メルカトルX座標から正規化X座標に変換する
-1.0 <= my <= +1.0
-12.0 <= ny <= +12.0
49 50 51 |
# File 'lib/geodelta/projector.rb', line 49 def self.mx_to_nx(mx) return mx * 12.0 end |
.my_to_lat(my) ⇒ Object
メルカトルY座標を緯度に変換する
-1.0 <= my <= +1.0
-90.0 <= lat <= +90.0
26 27 28 |
# File 'lib/geodelta/projector.rb', line 26 def self.my_to_lat(my) return Math.asin(Math.tanh(my * Math::PI)) * RAD2DEG end |
.my_to_ny(my) ⇒ Object
メルカトルY座標から正規化Y座標に変換する
-1.0 <= my <= +1.0
-12.0 <= ny <= +12.0
42 43 44 |
# File 'lib/geodelta/projector.rb', line 42 def self.my_to_ny(my) return my / DELTA_HEIGHT * 12.0 end |
.nx_to_lng(nx) ⇒ Object
79 80 81 |
# File 'lib/geodelta/projector.rb', line 79 def self.nx_to_lng(nx) return self.mx_to_lng(self.nx_to_mx(nx)) end |
.nx_to_mx(ny) ⇒ Object
正規化X座標からメルカトルX座標に変換する
-12.0 <= ny <= +12.0
-1.0 <= my <= +1.0
63 64 65 |
# File 'lib/geodelta/projector.rb', line 63 def self.nx_to_mx(ny) return ny / 12.0 end |
.nxy_to_latlng(nx, ny) ⇒ Object
90 91 92 93 94 95 |
# File 'lib/geodelta/projector.rb', line 90 def self.nxy_to_latlng(nx, ny) return [ self.ny_to_lat(ny), self.nx_to_lng(nx), ] end |
.ny_to_lat(ny) ⇒ Object
75 76 77 |
# File 'lib/geodelta/projector.rb', line 75 def self.ny_to_lat(ny) return self.my_to_lat(self.ny_to_my(ny)) end |
.ny_to_my(my) ⇒ Object
正規化Y座標からメルカトルY座標に変換する
-12.0 <= ny <= +12.0
-1.0 <= my <= +1.0
56 57 58 |
# File 'lib/geodelta/projector.rb', line 56 def self.ny_to_my(my) return my / 12.0 * DELTA_HEIGHT end |