X-Git-Url: https://git.openstreetmap.org./rails.git/blobdiff_plain/7f598ab412674ce5a78da98c54aa2fe2e4a05792..a694609ffad8a2724482586d23efd8951b65f141:/lib/bounding_box.rb diff --git a/lib/bounding_box.rb b/lib/bounding_box.rb index 38b994d26..e2dfcd3ff 100644 --- a/lib/bounding_box.rb +++ b/lib/bounding_box.rb @@ -1,13 +1,13 @@ class BoundingBox attr_reader :min_lon, :min_lat, :max_lon, :max_lat -private LON_LIMIT = 180.0 LAT_LIMIT = 90.0 - SCALED_LON_LIMIT = LON_LIMIT * GeoRecord::SCALE - SCALED_LAT_LIMIT = LAT_LIMIT * GeoRecord::SCALE + SCALED_LON_LIMIT = LON_LIMIT * GeoRecord::SCALE + SCALED_LAT_LIMIT = LAT_LIMIT * GeoRecord::SCALE + + public -public def initialize(min_lon, min_lat, max_lon, max_lat) @min_lon = min_lon.to_f unless min_lon.nil? @min_lat = min_lat.to_f unless min_lat.nil? @@ -16,29 +16,25 @@ public end def self.from_s(s) - if s.count(',') == 3 - BoundingBox.new(*s.split(/,/)) - else - nil - end + BoundingBox.new(*s.split(/,/)) if s.count(",") == 3 end def self.from_bbox_params(params) - if params[:bbox] and params[:bbox].count(',') == 3 - bbox_array = params[:bbox].split(',') + if params[:bbox] && params[:bbox].count(",") == 3 + bbox_array = params[:bbox].split(",") end from_bbox_array(bbox_array) end def self.from_lon_lat_params(params) - if params[:minlon] and params[:minlat] and params[:maxlon] and params[:maxlat] + if params[:minlon] && params[:minlat] && params[:maxlon] && params[:maxlat] bbox_array = [params[:minlon], params[:minlat], params[:maxlon], params[:maxlat]] end from_bbox_array(bbox_array) end def self.from_lrbt_params(params) - if params[:l] and params[:b] and params[:t] and params[:t] + if params[:l] && params[:b] && params[:t] && params[:t] bbox_array = [params[:l], params[:b], params[:r], params[:t]] end from_bbox_array(bbox_array) @@ -64,15 +60,15 @@ public def check_boundaries # check the bbox is sane if min_lon > max_lon - raise OSM::APIBadBoundingBox.new( + fail OSM::APIBadBoundingBox.new( "The minimum longitude must be less than the maximum longitude, but it wasn't") end if min_lat > max_lat - raise OSM::APIBadBoundingBox.new( + fail OSM::APIBadBoundingBox.new( "The minimum latitude must be less than the maximum latitude, but it wasn't") end if min_lon < -LON_LIMIT || min_lat < -LAT_LIMIT || max_lon > +LON_LIMIT || max_lat > +LAT_LIMIT - raise OSM::APIBadBoundingBox.new("The latitudes must be between #{-LAT_LIMIT} and #{LAT_LIMIT}," + + fail OSM::APIBadBoundingBox.new("The latitudes must be between #{-LAT_LIMIT} and #{LAT_LIMIT}," + " and longitudes between #{-LON_LIMIT} and #{LON_LIMIT}") end self @@ -81,7 +77,7 @@ public def check_size(max_area = MAX_REQUEST_AREA) # check the bbox isn't too large if area > max_area - raise OSM::APIBadBoundingBox.new("The maximum bbox size is " + max_area.to_s + + fail OSM::APIBadBoundingBox.new("The maximum bbox size is " + max_area.to_s + ", and your request was too large. Either request a smaller area, or use planet.osm") end self @@ -98,7 +94,7 @@ public end def complete? - not to_a.include?(nil) + !to_a.include?(nil) end def centre_lon @@ -118,7 +114,7 @@ public end def slippy_width(zoom) - width * 256.0 * 2.0 ** zoom / 360.0 + width * 256.0 * 2.0**zoom / 360.0 end def slippy_height(zoom) @@ -127,7 +123,7 @@ public Math.log((Math.tan(max) + 1.0 / Math.cos(max)) / (Math.tan(min) + 1.0 / Math.cos(min))) * - (128.0 * 2.0 ** zoom / Math::PI) + (128.0 * 2.0**zoom / Math::PI) end # there are two forms used for bounds with and without an underscore, @@ -163,9 +159,10 @@ public end private + def self.from_bbox_array(bbox_array) unless bbox_array - raise OSM::APIBadUserInput.new( + fail OSM::APIBadUserInput.new( "The parameter bbox is required, and must be of the form min_lon,min_lat,max_lon,max_lat") end # Take an array of length 4, create a bounding box with min_lon, min_lat, max_lon and