geokit-with-google-premier 1.5.0 → 1.5.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. data/README.markdown +45 -2
  2. data/lib/geokit/geocoders.rb +31 -0
  3. metadata +11 -4
data/README.markdown CHANGED
@@ -1,8 +1,51 @@
1
1
  ## GEOKIT GEM DESCRIPTION
2
2
 
3
- For Premier instructions visit:
3
+ **For Premier instructions visit:**
4
+
5
+ 1. http://groups.google.com/group/geokit/browse_thread/thread/14813f74bc0da41f/cd9d30f79dfa7088?lnk=gst&q=premier#cd9d30f79dfa7088
6
+
7
+ **Cache Support Added:**
8
+ credit: Brian Armstrong
9
+ http://groups.google.com/group/geokit/browse_thread/thread/cab2e140184de9bf/f29bc0d284b5cd41?lnk=gst&q=%5B%3Acache#f29bc0d284b5cd41
10
+
11
+ You need to:
12
+
13
+ 1. Create GeocodeCache model
14
+
15
+ class CreateGeocodeCaches < ActiveRecord::Migration
16
+ def self.up
17
+ create_table :geocode_caches do |t|
18
+ t.string :address
19
+ t.float :lat
20
+ t.float :lng
21
+
22
+ t.timestamps
23
+ end
24
+ add_index :geocode_caches, :address
25
+ end
26
+
27
+ def self.down
28
+ drop_table :geocode_caches
29
+ end
30
+ end
31
+
32
+
33
+ 2. And then add a method to this model
34
+
35
+ class GeocodeCache < ActiveRecord::Base
36
+ def self.store address, lat, lng
37
+ GeocodeCache.create(:address=>address, :lat=>lat, :lng=>lng)
38
+ end
39
+ end
40
+
41
+ 3. In environment.rb add the new cache geocoder to the front of your priority list so it will try the cache first (note: this assumes you are using the MultiCoder)
42
+
43
+ GeoKit::Geocoders::provider_order = [:cache,:google,:yahoo]
44
+
45
+ 4. To invalidate the cache occasionally you can run something like this in a cron job (addresses shouldn't move very often)
46
+
47
+ GeocodeCache.delete_all(["created_at < ?",2.months.ago]
4
48
 
5
- http://groups.google.com/group/geokit/browse_thread/thread/14813f74bc0da41f/cd9d30f79dfa7088?lnk=gst&q=premier#cd9d30f79dfa7088
6
49
 
7
50
  The Geokit gem provides:
8
51
 
@@ -473,6 +473,11 @@ module Geokit
473
473
  geoloc.all.push(extracted_geoloc)
474
474
  end
475
475
  end
476
+
477
+ ## Cache the result
478
+ GeocodeCache.store(address, geoloc.lat, geoloc.lng)
479
+ logger.debug "Google geocoding CACHED. Address: #{address}. Place [#{geoloc.lat},#{geoloc.lng}]"
480
+
476
481
  return geoloc
477
482
  elsif doc.elements['//kml/Response/Status/code'].text == '620'
478
483
  raise Geokit::TooManyQueriesError
@@ -602,6 +607,7 @@ module Geokit
602
607
  res
603
608
  end
604
609
  end
610
+
605
611
 
606
612
  # -------------------------------------------------------------------------------------------
607
613
  # The Multi Geocoder
@@ -659,5 +665,30 @@ module Geokit
659
665
  GeoLoc.new
660
666
  end
661
667
  end
668
+
669
+ # -------------------------------------------------------------------------------------------
670
+ # Caching
671
+ # -------------------------------------------------------------------------------------------
672
+
673
+ class CacheGeocoder < Geocoder
674
+ private
675
+
676
+ def self.do_geocode(address, options = {})
677
+ logger.error("TRYING CACHE")
678
+
679
+ cache = GeocodeCache.find(:first, :conditions => ["address = ?",address])
680
+
681
+ if cache.nil?
682
+ logger.debug "Cache result for #{address} was nil."
683
+ GeoLoc.new
684
+ else
685
+ res = GeoLoc.new(:lat=>cache.lat, :lng=>cache.lng)
686
+ res.success = true
687
+ logger.debug "GeoCode result from cache. Address: #{address}. Place [#{cache.lat},#{cache.lng}]"
688
+ res
689
+ end
690
+ end
691
+ end
692
+
662
693
  end
663
694
  end
metadata CHANGED
@@ -1,7 +1,12 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: geokit-with-google-premier
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.0
4
+ prerelease: false
5
+ segments:
6
+ - 1
7
+ - 5
8
+ - 5
9
+ version: 1.5.5
5
10
  platform: ruby
6
11
  authors:
7
12
  - Andre Lewis and Bill Eisenhauer
@@ -53,18 +58,20 @@ required_ruby_version: !ruby/object:Gem::Requirement
53
58
  requirements:
54
59
  - - ">="
55
60
  - !ruby/object:Gem::Version
61
+ segments:
62
+ - 0
56
63
  version: "0"
57
- version:
58
64
  required_rubygems_version: !ruby/object:Gem::Requirement
59
65
  requirements:
60
66
  - - ">="
61
67
  - !ruby/object:Gem::Version
68
+ segments:
69
+ - 0
62
70
  version: "0"
63
- version:
64
71
  requirements: []
65
72
 
66
73
  rubyforge_project: geokit
67
- rubygems_version: 1.3.5
74
+ rubygems_version: 1.3.6
68
75
  signing_key:
69
76
  specification_version: 2
70
77
  summary: none