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