Bounds represents a rectangular bounds, defined by the SW and NE corners
returns an instance of bounds which completely encompases the given circle
# File lib/geokit/bounds.rb, line 66 def from_point_and_radius(point,radius,options={}) point=LatLng.normalize(point) p0=point.endpoint(0,radius,options) p90=point.endpoint(90,radius,options) p180=point.endpoint(180,radius,options) p270=point.endpoint(270,radius,options) sw=Geokit::LatLng.new(p180.lat,p270.lng) ne=Geokit::LatLng.new(p0.lat,p90.lng) Geokit::Bounds.new(sw,ne) end
provide sw and ne to instantiate a new Bounds instance
# File lib/geokit/bounds.rb, line 8 def initialize(sw,ne) raise ArgumentError if !(sw.is_a?(Geokit::LatLng) && ne.is_a?(Geokit::LatLng)) @sw,@ne=sw,ne end
Takes two main combinations of arguments to create a bounds: point,point (this is the only one which takes two arguments
. . . where a point is anything LatLng#normalize can handle (which is quite a lot)
NOTE: everything combination is assumed to pass points in the order sw, ne
# File lib/geokit/bounds.rb, line 83 def normalize (thing,other=nil) # maybe this will be simple -- an actual bounds object is passed, and we can all go home return thing if thing.is_a? Bounds # no? OK, if there's no "other," the thing better be a two-element array thing,other=thing if !other && thing.is_a?(Array) && thing.size==2 # Now that we're set with a thing and another thing, let LatLng do the heavy lifting. # Exceptions may be thrown Bounds.new(Geokit::LatLng.normalize(thing),Geokit::LatLng.normalize(other)) end
Returns true if the candidate object is logically equal. Logical equivalence is true if the lat and lng attributes are the same for both objects.
# File lib/geokit/bounds.rb, line 48 def ==(other) return false unless other.is_a?(Bounds) sw == other.sw && ne == other.ne end
returns the a single point which is the center of the rectangular bounds
# File lib/geokit/bounds.rb, line 14 def center @sw.midpoint_to(@ne) end
Returns true if the bounds contain the passed point. allows for bounds which cross the meridian
# File lib/geokit/bounds.rb, line 30 def contains?(point) point=Geokit::LatLng.normalize(point) res = point.lat > @sw.lat && point.lat < @ne.lat if crosses_meridian? res &= point.lng < @ne.lng || point.lng > @sw.lng else res &= point.lng < @ne.lng && point.lng > @sw.lng end res end
returns true if the bounds crosses the international dateline
# File lib/geokit/bounds.rb, line 42 def crosses_meridian? @sw.lng > @ne.lng end
a two-element array of two-element arrays: sw,ne
# File lib/geokit/bounds.rb, line 24 def to_a [@sw.to_a, @ne.to_a] end
a simple string representation:sw,ne
# File lib/geokit/bounds.rb, line 19 def to_s "#{@sw.to_s},#{@ne.to_s}" end
Equivalent to Google Maps API’s .toSpan() method on GLatLng’s.
Returns a LatLng object, whose coordinates represent the size of a rectangle defined by these bounds.
# File lib/geokit/bounds.rb, line 57 def to_span lat_span = (@ne.lat - @sw.lat).abs lng_span = (crosses_meridian? ? 360 + @ne.lng - @sw.lng : @ne.lng - @sw.lng).abs Geokit::LatLng.new(lat_span, lng_span) end
Generated with the Darkfish Rdoc Generator 2.