+ def expand!(bbox, margin = 0)
+ update!(bbox) unless complete?
+ # only try to expand the bbox if there is a value for every coordinate
+ # which there will be from the previous line as long as array does not contain a nil
+ if bbox.complete?
+ if bbox.min_lon < min_lon
+ @min_lon = [-SCALED_LON_LIMIT,
+ bbox.min_lon + (margin * (min_lon - max_lon))].max
+ end
+ if bbox.min_lat < min_lat
+ @min_lat = [-SCALED_LAT_LIMIT,
+ bbox.min_lat + (margin * (min_lat - max_lat))].max
+ end
+ if bbox.max_lon > max_lon
+ @max_lon = [+SCALED_LON_LIMIT,
+ bbox.max_lon + (margin * (max_lon - min_lon))].min
+ end
+ if bbox.max_lat > max_lat
+ @max_lat = [+SCALED_LAT_LIMIT,
+ bbox.max_lat + (margin * (max_lat - min_lat))].min
+ end
+ end
+ self
+ end
+
+ def check_boundaries
+ # check the bbox is sane
+ raise OSM::APIBadBoundingBox, "The minimum longitude must be less than the maximum longitude, but it wasn't" if min_lon > max_lon
+ raise OSM::APIBadBoundingBox, "The minimum latitude must be less than the maximum latitude, but it wasn't" if min_lat > max_lat
+
+ if min_lon < -LON_LIMIT || min_lat < -LAT_LIMIT || max_lon > +LON_LIMIT || max_lat > +LAT_LIMIT
+ raise OSM::APIBadBoundingBox, "The latitudes must be between #{-LAT_LIMIT} and #{LAT_LIMIT}, " \
+ "and longitudes between #{-LON_LIMIT} and #{LON_LIMIT}"
+ end
+ self