# File lib/geokit/lat_lng.rb, line 16 def self.from_json(json) new(json['lat'], json['lng']) end
# File lib/geokit/lat_lng.rb, line 103 def self.from_string(thing) thing.strip! if match=thing.match(/(\-?\d+\.?\d*)[, ] ?(\-?\d+\.?\d*)$/) Geokit::LatLng.new(match[1], match[2]) else res = Geokit::Geocoders::MultiGeocoder.geocode(thing) return res if res.success? raise Geokit::Geocoders::GeocodeError end end
Accepts latitude and longitude or instantiates an empty instance if lat and lng are not provided. Converted to floats if provided
# File lib/geokit/lat_lng.rb, line 9 def initialize(lat=nil, lng=nil) lat = lat.to_f if lat && !lat.is_a?(Numeric) lng = lng.to_f if lng && !lng.is_a?(Numeric) @lat = lat @lng = lng end
A class method to take anything which can be inferred as a point and generate a LatLng from it. You should use this anything you’re not sure what the input is, and want to deal with it as a LatLng if at all possible. Can take:
1) two arguments (lat,lng) 2) a string in the format "37.1234,-129.1234" or "37.1234 -129.1234" 3) a string which can be geocoded on the fly 4) an array in the format [37.1234,-129.1234] 5) a LatLng or GeoLoc (which is just passed through as-is) 6) anything responding to to_lat_lng -- a LatLng will be extracted from it
# File lib/geokit/lat_lng.rb, line 83 def self.normalize(thing, other=nil) return Geokit::LatLng.new(thing, other) if other case thing when String from_string(thing) when Array thing.size == 2 or raise ArgumentError.new("Must initialize with an Array with both latitude and longitude") Geokit::LatLng.new(thing[0], thing[1]) when LatLng # will also be true for GeoLocs thing else if thing.respond_to? :to_lat_lng thing.to_lat_lng else raise ArgumentError.new("#{thing} (#{thing.class}) cannot be normalized to a LatLng. We tried interpreting it as an array, string, etc., but no dice.") end end 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/lat_lng.rb, line 56 def ==(other) return false unless other.is_a?(LatLng) lat == other.lat && lng == other.lng end
# File lib/geokit/lat_lng.rb, line 65 def eql?(other) self == other end
# File lib/geokit/lat_lng.rb, line 61 def hash lat.hash + lng.hash end
Latitude attribute setter; stored as a float.
# File lib/geokit/lat_lng.rb, line 21 def lat=(lat) @lat = lat.to_f if lat end
returns latitude as [ degree, minute, second ] array
# File lib/geokit/lat_lng.rb, line 36 def lat_dms self.class.decimal_to_dms(lat) end
Returns the lat and lng attributes as a comma-separated string.
# File lib/geokit/lat_lng.rb, line 31 def ll "#{lat},#{lng}" end
Longitude attribute setter; stored as a float;
# File lib/geokit/lat_lng.rb, line 26 def lng=(lng) @lng=lng.to_f if lng end
returns longitude as [ degree, minute, second ] array
# File lib/geokit/lat_lng.rb, line 41 def lng_dms self.class.decimal_to_dms(lng) end
Reverse geocodes a LatLng object using the MultiGeocoder (default), or optionally using a geocoder of your choosing. Returns a new Geokit::GeoLoc object
:using - Specifies the geocoder to use for reverse geocoding. Defaults to
MultiGeocoder. Can be either the geocoder class (or any class that implements do_reverse_geocode for that matter), or the name of the class without the "Geocoder" part (e.g. :google)
LatLng.new(51.4578329, 7.0166848).reverse_geocode # => #<Geokit::GeoLoc:0x12dac20 @state...> LatLng.new(51.4578329, 7.0166848).reverse_geocode(:using => :google) # => #<Geokit::GeoLoc:0x12dac20 @state...> LatLng.new(51.4578329, 7.0166848).reverse_geocode(:using => Geokit::Geocoders::GoogleGeocoder) # => #<Geokit::GeoLoc:0x12dac20 @state...>
# File lib/geokit/lat_lng.rb, line 127 def reverse_geocode(options = { :using => Geokit::Geocoders::MultiGeocoder }) if options[:using].is_a?(String) || options[:using].is_a?(Symbol) provider = Geokit::Geocoders.const_get("#{Geokit::Inflector::camelize(options[:using].to_s)}Geocoder") elsif options[:using].respond_to?(:do_reverse_geocode) provider = options[:using] else raise ArgumentError.new("#{options[:using]} is not a valid geocoder.") end provider.send(:reverse_geocode, self) end
returns a two-element array
# File lib/geokit/lat_lng.rb, line 51 def to_a [lat,lng] end
Generated with the Darkfish Rdoc Generator 2.