Sha256: cf2c1585c38d71ae281ea63fea26a739b423e2ae83db1eba71bf07e6ed4b78c8

Contents?: true

Size: 1.46 KB

Versions: 4

Compression:

Stored size: 1.46 KB

Contents

# 本来なら都道府県によって座標系が決定されるべきだが、とりあえず簡易的に最も近いものを対象とする
class CfSim::CordinationSystem
  attr_reader :latitude, :longitude

  ORIGIN_MAP = { 1  => [33.00000,129.30000],
                 2  => [33.00000,131.00000],
                 3  => [36.00000,132.10000],
                 4  => [33.00000,133.30000],
                 5  => [36.00000,134.20000],
                 6  => [36.00000,136.00000],
                 7  => [36.00000,137.10000],
                 8  => [36.00000,138.30000],
                 9  => [36.00000,139.50000],
                 10 => [40.00000,140.50000],
                 11 => [44.00000,140.15000],
                 12 => [44.00000,142.15000],
                 13 => [44.00000,144.15000],
                 14 => [26.00000,142.00000],
                 15 => [26.00000,127.30000],
                 16 => [26.00000,124.00000],
                 17 => [26.00000,131.00000],
                 18 => [20.00000,136.00000],
                 19 => [26.00000,154.00000] }

  def initialize(latitude, longitude)
    @latitude = latitude
    @longitude = longitude
  end

  def nearest_system_number
    @nearest_system_number ||= ORIGIN_MAP.min_by { |_, origin| distance(origin) }.first
  end

  def nearest_origin
    @nearest_origin ||= ORIGIN_MAP[nearest_system_number]
  end

  private

  def distance(origin)
    Math.sqrt((origin.first - @latitude) ** 2 + (origin.last - @longitude) ** 2)
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
cf_sim-1.1.2 lib/cf_sim/cordination_system.rb
cf_sim-1.1.1 lib/cf_sim/cordination_system.rb
cf_sim-1.1.0 lib/cf_sim/cordination_system.rb
cf_sim-1.0.0 lib/cf_sim/cordination_system.rb