X-Git-Url: https://git.openstreetmap.org./rails.git/blobdiff_plain/ef7f3d800cbdd49b692df10d312e5fd880e2e938..ce761b3193c41081182e129d4f4aa18268e69264:/lib/geo_record.rb?ds=inline diff --git a/lib/geo_record.rb b/lib/geo_record.rb index 61185a314..e02734ec9 100644 --- a/lib/geo_record.rb +++ b/lib/geo_record.rb @@ -1,4 +1,19 @@ +require "delegate" + module GeoRecord + # Ensure that when coordinates are printed that they are always in decimal degrees, + # and not e.g. 4.0e-05 + # Unfortunately you can't extend Numeric classes directly (e.g. `Coord < Float`). + class Coord < DelegateClass(Float) + def initialize(obj) + super(obj) + end + + def to_s + format("%.7f", self) + end + end + # This scaling factor is used to convert between the float lat/lon that is # returned by the API, and the integer lat/lon equivalent that is stored in # the database. @@ -14,6 +29,7 @@ module GeoRecord def in_world? return false if lat < -90 || lat > 90 return false if lon < -180 || lon > 180 + true end @@ -31,17 +47,11 @@ module GeoRecord # Return WGS84 latitude def lat - latitude.to_f / SCALE + Coord.new(latitude.to_f / SCALE) end # Return WGS84 longitude def lon - longitude.to_f / SCALE - end - - private - - def lat2y(a) - 180 / Math::PI * Math.log(Math.tan(Math::PI / 4 + a * (Math::PI / 180) / 2)) + Coord.new(longitude.to_f / SCALE) end end