]> git.openstreetmap.org Git - rails.git/blobdiff - lib/osm.rb
synced with en.yml [16143]
[rails.git] / lib / osm.rb
index 02aa1a105306cbe3b3afa214a04c0ae151339a44..789a5f4398b72dadb1a186e39f352155766638eb 100644 (file)
@@ -112,7 +112,7 @@ module OSM
       :conflict
     end
 
       :conflict
     end
 
-    def rto_s
+    def to_s
       "Changeset mismatch: Provided #{@provided} but only #{@allowed} is allowed"
     end
   end
       "Changeset mismatch: Provided #{@provided} but only #{@allowed} is allowed"
     end
   end
@@ -218,6 +218,22 @@ module OSM
     end
   end
 
     end
   end
 
+  ##
+  # raised when bounding box is invalid
+  class APIBadBoundingBox < APIError
+    def initialize(message)
+      @message = message
+    end
+
+    def status
+      :bad_request
+    end
+
+    def to_s
+      @message
+    end
+  end
+
   ##
   # raised when an API call is made using a method not supported on that URI
   class APIBadMethodError < APIError
   ##
   # raised when an API call is made using a method not supported on that URI
   class APIBadMethodError < APIError
@@ -318,6 +334,11 @@ module OSM
       maxlon = (@lon + lonradius) * 180 / PI
       return { :minlat => minlat, :maxlat => maxlat, :minlon => minlon, :maxlon => maxlon }
     end
       maxlon = (@lon + lonradius) * 180 / PI
       return { :minlat => minlat, :maxlat => maxlat, :minlon => minlon, :maxlon => maxlon }
     end
+
+    # get the SQL to use to calculate distance
+    def sql_for_distance(lat_field, lon_field)
+      "6372.795 * 2 * asin(sqrt(power(sin((radians(#{lat_field}) - #{@lat}) / 2), 2) + cos(#{@lat}) * cos(radians(#{lat_field})) * power(sin((radians(#{lon_field}) - #{@lon})/2), 2)))"
+    end
   end
 
   class GeoRSS
   end
 
   class GeoRSS