X-Git-Url: https://git.openstreetmap.org./rails.git/blobdiff_plain/f04211b1722e27037b305b58479157b5a492f30a..ce761b3193c41081182e129d4f4aa18268e69264:/lib/geo_record.rb diff --git a/lib/geo_record.rb b/lib/geo_record.rb index 09ced9729..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,11 +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 + Coord.new(longitude.to_f / SCALE) end end