Class: Geokit::GeoLoc

Inherits:
LatLng
  • Object
show all
Defined in:
lib/geokit/mappable.rb

Overview

This class encapsulates the result of a geocoding call. It’s primary purpose is to homogenize the results of multiple geocoding providers. It also provides some additional functionality, such as the “full address” method for geocoders that do not provide a full address in their results (for example, Yahoo), and the “is_us” method.

Some geocoders can return multple results. Geoloc can capture multiple results through its “all” method.

For the geocoder setting the results, it would look something like this:

geo=GeoLoc.new(first_result)
geo.all.push(second_result)
geo.all.push(third_result)

Then, for the user of the result:

puts geo.full_address     # just like usual
puts geo.all.size  => 3   # there's three results total
puts geo.all.first        # all is just an array or additional geolocs,
                            so do what you want with it

Constant Summary

Constants included from Mappable

Mappable::EARTH_RADIUS_IN_KMS, Mappable::EARTH_RADIUS_IN_MILES, Mappable::EARTH_RADIUS_IN_NMS, Mappable::KMS_PER_LATITUDE_DEGREE, Mappable::KMS_PER_MILE, Mappable::LATITUDE_DEGREES, Mappable::MILES_PER_LATITUDE_DEGREE, Mappable::NMS_PER_LATITUDE_DEGREE, Mappable::NMS_PER_MILE, Mappable::PI_DIV_RAD

Instance Attribute Summary collapse

Attributes inherited from LatLng

#lat, #lng

Instance Method Summary collapse

Methods inherited from LatLng

#==, #eql?, #ll, normalize, #reverse_geocode, #to_a

Methods included from Mappable

#distance_to, #endpoint, #heading_from, #heading_to, included, #midpoint_to, #to_lat_lng

Constructor Details

#initialize(h = {}) ⇒ GeoLoc

Constructor expects a hash of symbols to correspond with attributes.



359
360
361
362
363
364
365
366
367
368
369
370
371
372
# File 'lib/geokit/mappable.rb', line 359

def initialize(h={})
  @all = [self]
  
  @street_address=h[:street_address] 
  @city=h[:city] 
  @state=h[:state] 
  @zip=h[:zip] 
  @country_code=h[:country_code]
  @province = h[:province]
  @success=false
  @precision='unknown'
  @full_address=nil
  super(h[:lat],h[:lng])
end

Instance Attribute Details

#accuracyObject

accuracy is set for Yahoo and Google geocoders, it is a numeric value of the precision. see code.google.com/apis/maps/documentation/geocoding/#GeocodingAccuracy



356
357
358
# File 'lib/geokit/mappable.rb', line 356

def accuracy
  @accuracy
end

#allObject

Location attributes. Full address is a concatenation of all values. For example: 100 Spear St, San Francisco, CA, 94101, US



345
346
347
# File 'lib/geokit/mappable.rb', line 345

def all
  @all
end

#cityObject

Location attributes. Full address is a concatenation of all values. For example: 100 Spear St, San Francisco, CA, 94101, US



345
346
347
# File 'lib/geokit/mappable.rb', line 345

def city
  @city
end

#countryObject

Location attributes. Full address is a concatenation of all values. For example: 100 Spear St, San Francisco, CA, 94101, US



345
346
347
# File 'lib/geokit/mappable.rb', line 345

def country
  @country
end

#country_codeObject

Location attributes. Full address is a concatenation of all values. For example: 100 Spear St, San Francisco, CA, 94101, US



345
346
347
# File 'lib/geokit/mappable.rb', line 345

def country_code
  @country_code
end

#districtObject

Location attributes. Full address is a concatenation of all values. For example: 100 Spear St, San Francisco, CA, 94101, US



345
346
347
# File 'lib/geokit/mappable.rb', line 345

def district
  @district
end

#full_addressObject

full_address is provided by google but not by yahoo. It is intended that the google geocoding method will provide the full address, whereas for yahoo it will be derived from the parts of the address we do have.



345
346
347
# File 'lib/geokit/mappable.rb', line 345

def full_address
  @full_address
end

#nameObject

Optional attributes, returned by geonames in particular



347
348
349
# File 'lib/geokit/mappable.rb', line 347

def name
  @name
end

#precisionObject

Attributes set upon return from geocoding. Success will be true for successful geocode lookups. The provider will be set to the name of the providing geocoder. Finally, precision is an indicator of the accuracy of the geocoding.



351
352
353
# File 'lib/geokit/mappable.rb', line 351

def precision
  @precision
end

#providerObject

Attributes set upon return from geocoding. Success will be true for successful geocode lookups. The provider will be set to the name of the providing geocoder. Finally, precision is an indicator of the accuracy of the geocoding.



351
352
353
# File 'lib/geokit/mappable.rb', line 351

def provider
  @provider
end

#provinceObject

Location attributes. Full address is a concatenation of all values. For example: 100 Spear St, San Francisco, CA, 94101, US



345
346
347
# File 'lib/geokit/mappable.rb', line 345

def province
  @province
end

#stateObject

Location attributes. Full address is a concatenation of all values. For example: 100 Spear St, San Francisco, CA, 94101, US



345
346
347
# File 'lib/geokit/mappable.rb', line 345

def state
  @state
end

#street_addressObject

Location attributes. Full address is a concatenation of all values. For example: 100 Spear St, San Francisco, CA, 94101, US



345
346
347
# File 'lib/geokit/mappable.rb', line 345

def street_address
  @street_address
end

#street_nameObject (readonly)

Returns the street name portion of the street address.



353
354
355
# File 'lib/geokit/mappable.rb', line 353

def street_name
  @street_name
end

#street_numberObject (readonly)

Extracts the street number from the street address if the street address has a value.



353
354
355
# File 'lib/geokit/mappable.rb', line 353

def street_number
  @street_number
end

#successObject

Attributes set upon return from geocoding. Success will be true for successful geocode lookups. The provider will be set to the name of the providing geocoder. Finally, precision is an indicator of the accuracy of the geocoding.



351
352
353
# File 'lib/geokit/mappable.rb', line 351

def success
  @success
end

#suggested_boundsObject

Attributes set upon return from geocoding. Success will be true for successful geocode lookups. The provider will be set to the name of the providing geocoder. Finally, precision is an indicator of the accuracy of the geocoding.



351
352
353
# File 'lib/geokit/mappable.rb', line 351

def suggested_bounds
  @suggested_bounds
end

#timezoneObject

Optional attributes, returned by geonames in particular



347
348
349
# File 'lib/geokit/mappable.rb', line 347

def timezone
  @timezone
end

#zipObject

Location attributes. Full address is a concatenation of all values. For example: 100 Spear St, San Francisco, CA, 94101, US



345
346
347
# File 'lib/geokit/mappable.rb', line 345

def zip
  @zip
end

Instance Method Details

#hashObject Also known as: to_hash

gives you all the important fields as key-value pairs



402
403
404
405
406
# File 'lib/geokit/mappable.rb', line 402

def hash
  res={}
  [:success,:lat,:lng,:country_code,:city,:state,:zip,:street_address,:province,:district,:provider,:full_address,:is_us?,:ll,:precision].each { |s| res[s] = self.send(s.to_s) }
  res
end

#is_us?Boolean

Returns true if geocoded to the United States.

Returns:

  • (Boolean)


375
376
377
# File 'lib/geokit/mappable.rb', line 375

def is_us?
  country_code == 'US'
end

#success?Boolean

Returns:

  • (Boolean)


379
380
381
# File 'lib/geokit/mappable.rb', line 379

def success?
  success == true
end

#to_geocodeable_sObject

Returns a comma-delimited string consisting of the street address, city, state, zip, and country code. Only includes those attributes that are non-blank.



421
422
423
424
425
# File 'lib/geokit/mappable.rb', line 421

def to_geocodeable_s
  a=[street_address, district, city, province, state, zip, country_code].compact
  a.delete_if { |e| !e || e == '' }
  a.join(', ')      
end

#to_sObject

Returns a string representation of the instance.



432
433
434
# File 'lib/geokit/mappable.rb', line 432

def to_s
  "Provider: #{provider}\nStreet: #{street_address}\nCity: #{city}\nState: #{state}\nZip: #{zip}\nLatitude: #{lat}\nLongitude: #{lng}\nCountry: #{country_code}\nSuccess: #{success}"
end

#to_yaml_propertiesObject



427
428
429
# File 'lib/geokit/mappable.rb', line 427

def to_yaml_properties
  (instance_variables - ['@all']).sort
end