class Location4meshcode::Point

Attributes

latitude[R]
longitude[R]

Public Class Methods

new(latitude:, longitude:) click to toggle source
# File lib/location4meshcode/point.rb, line 5
def initialize(latitude:, longitude:)
  # 1度 = 60分なので緯度はここで単位を分に変換しておく
  @latitude = (latitude.to_f) * 60
  @longitude = longitude.to_f
end

Public Instance Methods

meshcode(level:) click to toggle source
# File lib/location4meshcode/point.rb, line 11
def meshcode(level:)
  valid_params = [*1..3]
  raise ArgumentError unless valid_params.include?(level)

  call_method = "meshcode_level#{level}"
  send(call_method)
rescue ArgumentError
  "Please enter a valid value #{valid_params}"
end

Private Instance Methods

level1_lat_remainder() click to toggle source
# File lib/location4meshcode/point.rb, line 50
def level1_lat_remainder
  @latitude % 40
end
level1_lon_remainder() click to toggle source
# File lib/location4meshcode/point.rb, line 54
def level1_lon_remainder
  ((@longitude - @longitude.to_i) * 60)
end
level2_lat_remainder() click to toggle source
# File lib/location4meshcode/point.rb, line 58
def level2_lat_remainder
  level1_lat_remainder % 5
end
level2_lon_remainder() click to toggle source
# File lib/location4meshcode/point.rb, line 62
def level2_lon_remainder
  ((@longitude - @longitude.to_i) * 60) % 7.5
end
meshcode_level1() click to toggle source
# File lib/location4meshcode/point.rb, line 23
def meshcode_level1
  # 上2桁
  # 赤道から上方向に40分ごとに振っている通し番号。
  # 1度(=60分)あたり1.5区画分(60/40 = 1.5)となるので緯度を1.5倍したものが1次メッシュコードの上2桁
  lat = (@latitude / 40).to_i
  # 下2桁
  # 東経100度から1度ごとに通し番号を振っているので経度から100を引いたものが1次メッシュコードの下2桁となる。
  lon = @longitude.to_i - 100
  "#{lat}#{lon}"
end
meshcode_level2() click to toggle source
# File lib/location4meshcode/point.rb, line 34
def meshcode_level2
  # 1次メッシュコードの余りを8分区切りにした1つ
  lat = (level1_lat_remainder / 5).to_i
  lon = (level1_lon_remainder / 7.5).to_i
  # 1次メッシュの結果と結合
  meshcode_level1 + "#{lat}#{lon}"
end
meshcode_level3() click to toggle source
# File lib/location4meshcode/point.rb, line 42
def meshcode_level3
  # 2次メッシュ区画を10等分
  lat = ((level2_lat_remainder * 1) / 0.5).to_i
  lon = ((level2_lon_remainder * 1) / 0.75).to_i

  meshcode_level2 + "#{lat}#{lon}"
end