class Geokit::Geocoders::AirplaneGeocoder

Replace name ‘External’ (below) with the name of your custom geocoder class and use :external to specify this geocoder in your list of geocoders.

Private Class Methods

db() click to toggle source
# File lib/planefinder/airplane_geocoder.rb, line 27
def self.db
  File.join(File.dirname(__FILE__), "../../db/geocoding.db")
end
do_geocode(address, options = {}) click to toggle source
# File lib/planefinder/airplane_geocoder.rb, line 12
def self.do_geocode(address, options = {})
  record = case address
    when /,/
      city, state = address.split(',').map(&:strip)
      self.lookup_by_city_state(city, state)
    when /^\d{5}$/
      self.lookup_by_zip(address)
    when /[A-Z]{2}/
      self.lookup_by_state(address)
    else
      self.lookup_by_phone(address) if self.us_phone_number?(address)
  end
  record ? LatLng.new(record[:latitude], record[:longitude]) : LatLng.new
end
lookup_by_city_state(city, state) click to toggle source
# File lib/planefinder/airplane_geocoder.rb, line 31
def self.lookup_by_city_state(city, state)
  Sequel.sqlite(self.db) do |db|
    db[:zip_codes].first(:city => city, :state => state)
  end
end
lookup_by_phone(phone) click to toggle source
# File lib/planefinder/airplane_geocoder.rb, line 49
def self.lookup_by_phone(phone)
  area_code = self.sanitize_phone(phone)[0, 3]
  record = Sequel.sqlite(self.db) do |db|
    db[:zip_codes].where(Sequel.like(:area_codes, area_code)).first
  end
  record ? self.lookup_by_state(record[:state]) : nil
end
lookup_by_state(state) click to toggle source
# File lib/planefinder/airplane_geocoder.rb, line 37
def self.lookup_by_state(state)
  Sequel.sqlite(self.db) do |db|
    db[:states].first(:abbreviation => state)
  end
end
lookup_by_zip(zip) click to toggle source
# File lib/planefinder/airplane_geocoder.rb, line 43
def self.lookup_by_zip(zip)
  Sequel.sqlite(self.db) do |db|
    db[:zip_codes].first(:zip => zip)
  end
end
sanitize_phone(str) click to toggle source
# File lib/planefinder/airplane_geocoder.rb, line 57
def self.sanitize_phone(str)
  str.gsub(/[+( ).-]/, '')[/\d{10}$/]
end
us_phone_number?(str) click to toggle source
# File lib/planefinder/airplane_geocoder.rb, line 61
def self.us_phone_number?(str)
  self.sanitize_phone(str) =~ /^\d{10}$/
end