geo_coder 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +12 -0
- data/Gemfile.lock +32 -0
- data/History.txt +6 -0
- data/Makefile +13 -0
- data/Manifest.txt +18 -0
- data/README.rdoc +197 -0
- data/Rakefile +53 -0
- data/TODO.txt +8 -0
- data/VERSION +1 -0
- data/bin/build_indexes +8 -0
- data/bin/rebuild_cluster +22 -0
- data/bin/rebuild_metaphones +23 -0
- data/bin/tiger_import +59 -0
- data/demos/demo/app/ext/geocodewrap.rb +84 -0
- data/demos/demo/app/views/index.builder +13 -0
- data/demos/demo/app/views/index.erb +71 -0
- data/demos/demo/config.ru +12 -0
- data/demos/demo/config/bootstraps.rb +130 -0
- data/demos/demo/config/geoenvironment.rb +25 -0
- data/demos/demo/geocoder_helper.rb +12 -0
- data/demos/demo/geocom_geocode.rb +10 -0
- data/demos/demo/main.rb +3 -0
- data/demos/demo/rakefile.rb +17 -0
- data/demos/demo/tmp/restart.txt +0 -0
- data/demos/simpledemo/views/index.builder +13 -0
- data/demos/simpledemo/views/index.erb +69 -0
- data/demos/simpledemo/ws.rb +83 -0
- data/doc/Makefile +7 -0
- data/doc/html4css1.css +279 -0
- data/doc/lookup.rst +193 -0
- data/doc/parsing.rst +125 -0
- data/doc/voidspace.css +147 -0
- data/geo_coder.gemspec +172 -0
- data/lib/geocoder/us.rb +21 -0
- data/lib/geocoder/us/address.rb +290 -0
- data/lib/geocoder/us/constants.rb +670 -0
- data/lib/geocoder/us/database.rb +745 -0
- data/lib/geocoder/us/import.rb +181 -0
- data/lib/geocoder/us/import/tiger.rb +13 -0
- data/lib/geocoder/us/numbers.rb +58 -0
- data/navteq/README +4 -0
- data/navteq/convert.sql +37 -0
- data/navteq/navteq_import +39 -0
- data/navteq/prepare.sql +92 -0
- data/sql/cluster.sql +16 -0
- data/sql/convert.sql +80 -0
- data/sql/create.sql +37 -0
- data/sql/index.sql +12 -0
- data/sql/place.csv +104944 -0
- data/sql/place.sql +104948 -0
- data/sql/setup.sql +78 -0
- data/src/Makefile +13 -0
- data/src/README +14 -0
- data/src/liblwgeom/Makefile +75 -0
- data/src/liblwgeom/box2d.c +54 -0
- data/src/liblwgeom/lex.yy.c +4799 -0
- data/src/liblwgeom/liblwgeom.h +1405 -0
- data/src/liblwgeom/lwalgorithm.c +946 -0
- data/src/liblwgeom/lwalgorithm.h +52 -0
- data/src/liblwgeom/lwcircstring.c +759 -0
- data/src/liblwgeom/lwcollection.c +541 -0
- data/src/liblwgeom/lwcompound.c +118 -0
- data/src/liblwgeom/lwcurvepoly.c +86 -0
- data/src/liblwgeom/lwgeom.c +886 -0
- data/src/liblwgeom/lwgeom_api.c +2201 -0
- data/src/liblwgeom/lwgparse.c +1219 -0
- data/src/liblwgeom/lwgunparse.c +1054 -0
- data/src/liblwgeom/lwline.c +525 -0
- data/src/liblwgeom/lwmcurve.c +125 -0
- data/src/liblwgeom/lwmline.c +137 -0
- data/src/liblwgeom/lwmpoint.c +138 -0
- data/src/liblwgeom/lwmpoly.c +141 -0
- data/src/liblwgeom/lwmsurface.c +129 -0
- data/src/liblwgeom/lwpoint.c +439 -0
- data/src/liblwgeom/lwpoly.c +579 -0
- data/src/liblwgeom/lwsegmentize.c +1047 -0
- data/src/liblwgeom/lwutil.c +369 -0
- data/src/liblwgeom/measures.c +861 -0
- data/src/liblwgeom/postgis_config.h +93 -0
- data/src/liblwgeom/ptarray.c +847 -0
- data/src/liblwgeom/vsprintf.c +179 -0
- data/src/liblwgeom/wktparse.h +126 -0
- data/src/liblwgeom/wktparse.lex +74 -0
- data/src/liblwgeom/wktparse.tab.c +2353 -0
- data/src/liblwgeom/wktparse.tab.h +145 -0
- data/src/liblwgeom/wktparse.y +385 -0
- data/src/libsqlite3_geocoder/Makefile +22 -0
- data/src/libsqlite3_geocoder/Makefile.nix +15 -0
- data/src/libsqlite3_geocoder/Makefile.redhat +15 -0
- data/src/libsqlite3_geocoder/extension.c +121 -0
- data/src/libsqlite3_geocoder/extension.h +13 -0
- data/src/libsqlite3_geocoder/levenshtein.c +42 -0
- data/src/libsqlite3_geocoder/metaphon.c +278 -0
- data/src/libsqlite3_geocoder/util.c +37 -0
- data/src/libsqlite3_geocoder/wkb_compress.c +54 -0
- data/src/metaphone/Makefile +7 -0
- data/src/metaphone/README +49 -0
- data/src/metaphone/extension.c +37 -0
- data/src/metaphone/metaphon.c +251 -0
- data/src/shp2sqlite/Makefile +37 -0
- data/src/shp2sqlite/Makefile.nix +36 -0
- data/src/shp2sqlite/Makefile.redhat +35 -0
- data/src/shp2sqlite/dbfopen.c +1595 -0
- data/src/shp2sqlite/getopt.c +695 -0
- data/src/shp2sqlite/getopt.h +127 -0
- data/src/shp2sqlite/shapefil.h +500 -0
- data/src/shp2sqlite/shp2sqlite.c +1974 -0
- data/src/shp2sqlite/shpopen.c +1894 -0
- data/tests/address.rb +236 -0
- data/tests/benchmark.rb +20 -0
- data/tests/constants.rb +57 -0
- data/tests/data/address-sample.csv +52 -0
- data/tests/data/db-test.csv +57 -0
- data/tests/data/locations.csv +4 -0
- data/tests/database.rb +137 -0
- data/tests/generate.rb +34 -0
- data/tests/numbers.rb +46 -0
- data/tests/run.rb +11 -0
- metadata +237 -0
data/tests/address.rb
ADDED
@@ -0,0 +1,236 @@
|
|
1
|
+
$LOAD_PATH.unshift '../lib'
|
2
|
+
|
3
|
+
require 'test/unit'
|
4
|
+
require 'set'
|
5
|
+
require 'geocoder/us/address'
|
6
|
+
|
7
|
+
include Geocoder::US
|
8
|
+
|
9
|
+
class TestAddress < Test::Unit::TestCase
|
10
|
+
def test_new
|
11
|
+
addr = Address.new("1600 Pennsylvania Av., Washington DC")
|
12
|
+
assert_equal "1600 Pennsylvania Av, Washington DC", addr.text
|
13
|
+
end
|
14
|
+
def test_clean
|
15
|
+
fixtures = [
|
16
|
+
[ "cleaned text", "cleaned: text!" ],
|
17
|
+
[ "cleaned-text 2", "cleaned-text: #2?" ],
|
18
|
+
[ "it's working 1/2", "~it's working 1/2~" ],
|
19
|
+
[ "it's working, yes", "it's working, yes...?" ],
|
20
|
+
[ "it's working & well", "it's working & well?" ]
|
21
|
+
]
|
22
|
+
fixtures.each {|output, given|
|
23
|
+
assert_equal output, Address.new(given).text
|
24
|
+
}
|
25
|
+
end
|
26
|
+
def test_expand_numbers
|
27
|
+
num_list = ["5", "fifth", "five"]
|
28
|
+
num_list.each {|n|
|
29
|
+
addr = Address.new(n)
|
30
|
+
assert_equal num_list, addr.expand_numbers(n).to_a.sort
|
31
|
+
}
|
32
|
+
end
|
33
|
+
def test_city_parse
|
34
|
+
places = [
|
35
|
+
[ "New York, NY", "New York", "NY", "" ],
|
36
|
+
[ "NY", "", "NY", "" ],
|
37
|
+
[ "New York", "New York", "NY", "" ],
|
38
|
+
[ "Philadelphia", "Philadelphia", "", "" ],
|
39
|
+
[ "Philadelphia PA", "Philadelphia", "PA", "" ],
|
40
|
+
[ "Philadelphia, PA", "Philadelphia", "PA", "" ],
|
41
|
+
[ "Philadelphia, Pennsylvania", "Philadelphia", "PA", "" ],
|
42
|
+
[ "Philadelphia, Pennsylvania 19131", "Philadelphia", "PA", "19131" ],
|
43
|
+
[ "Philadelphia 19131", "Philadelphia", "", "19131" ],
|
44
|
+
[ "Pennsylvania 19131", "Pennsylvania", "PA", "19131" ], # kind of a misfeature
|
45
|
+
[ "19131", "", "", "19131" ],
|
46
|
+
[ "19131-9999", "", "", "19131" ],
|
47
|
+
]
|
48
|
+
for fixture in places
|
49
|
+
addr = Address.new fixture[0]
|
50
|
+
[:city, :state, :zip].zip(fixture[1..3]).each {|key,val|
|
51
|
+
result = addr.send key
|
52
|
+
result = [result.downcase] unless result.kind_of? Array
|
53
|
+
if result.empty?
|
54
|
+
assert_equal val, "", key.to_s + " test no result " + fixture.join("/")
|
55
|
+
else
|
56
|
+
assert result.member?(val.downcase), key.to_s + " test " + result.inspect + fixture.join("/")
|
57
|
+
end
|
58
|
+
}
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
def test_po_box
|
63
|
+
addr_po = Address.new "PO Box 1111 Herndon VA 20171"
|
64
|
+
assert addr_po.po_box?, true
|
65
|
+
end
|
66
|
+
|
67
|
+
|
68
|
+
|
69
|
+
def test_parse
|
70
|
+
addrs = [
|
71
|
+
{:text => "1600 Pennsylvania Av., Washington DC 20050",
|
72
|
+
:number => "1600",
|
73
|
+
:street => "Pennsylvania Ave",
|
74
|
+
:city => "Washington",
|
75
|
+
:state => "DC",
|
76
|
+
:zip => "20050"},
|
77
|
+
|
78
|
+
{:text => "1600 Pennsylvania, Washington DC",
|
79
|
+
:number => "1600",
|
80
|
+
:street => "Pennsylvania",
|
81
|
+
:city => "Washington",
|
82
|
+
:state => "DC"},
|
83
|
+
|
84
|
+
{:text => "1600 Pennsylvania Washington DC",
|
85
|
+
:number => "1600",
|
86
|
+
:street => "Pennsylvania Washington",
|
87
|
+
:city => "Pennsylvania Washington", # FIXME
|
88
|
+
:state => "DC"},
|
89
|
+
|
90
|
+
{:text => "1600 Pennsylvania Washington",
|
91
|
+
:number => "1600",
|
92
|
+
:street => "Pennsylvania",
|
93
|
+
:city => "Washington",
|
94
|
+
:state => "WA"}, # FIXME
|
95
|
+
|
96
|
+
{:text => "1600 Pennsylvania 20050",
|
97
|
+
:number => "1600",
|
98
|
+
:street => "Pennsylvania", # FIXME
|
99
|
+
:zip => "20050"},
|
100
|
+
|
101
|
+
{:text => "1600 Pennsylvania Av, 20050-9999",
|
102
|
+
:number => "1600",
|
103
|
+
:street => "Pennsylvania Ave",
|
104
|
+
:zip => "20050"},
|
105
|
+
|
106
|
+
{:text => "1005 Gravenstein Highway North, Sebastopol CA",
|
107
|
+
:number => "1005",
|
108
|
+
:street => "Gravenstein Hwy N",
|
109
|
+
:city => "Sebastopol",
|
110
|
+
:state => "CA"},
|
111
|
+
|
112
|
+
{:text => "100 N 7th St, Brooklyn",
|
113
|
+
:number => "100",
|
114
|
+
:street => "N 7 St",
|
115
|
+
:city => "Brooklyn"},
|
116
|
+
|
117
|
+
{:text => "100 N Seventh St, Brooklyn",
|
118
|
+
:number => "100",
|
119
|
+
:street => "N 7 St",
|
120
|
+
:city => "Brooklyn"},
|
121
|
+
|
122
|
+
{:text => "100 Central Park West, New York, NY",
|
123
|
+
:number => "100",
|
124
|
+
:street => "Central Park W",
|
125
|
+
:city => "New York",
|
126
|
+
:state => "NY"},
|
127
|
+
|
128
|
+
{:text => "100 Central Park West, 10010",
|
129
|
+
:number => "100",
|
130
|
+
:street => "Central Park W",
|
131
|
+
:zip => "10010"},
|
132
|
+
|
133
|
+
{:text => "1400 Avenue of the Americas, New York, NY 10019",
|
134
|
+
:number => "1400",
|
135
|
+
:street => "Ave of the Americas",
|
136
|
+
:city => "New York",
|
137
|
+
:state => "NY"},
|
138
|
+
|
139
|
+
{:text => "1400 Avenue of the Americas, New York",
|
140
|
+
:number => "1400",
|
141
|
+
:street => "Ave of the Americas",
|
142
|
+
:city => "New York"},
|
143
|
+
|
144
|
+
{:text => "1400 Ave of the Americas, New York",
|
145
|
+
:number => "1400",
|
146
|
+
:street => "Ave of the Americas",
|
147
|
+
:city => "New York"},
|
148
|
+
|
149
|
+
{:text => "1400 Av of the Americas, New York",
|
150
|
+
:number => "1400",
|
151
|
+
:street => "Ave of the Americas",
|
152
|
+
:city => "New York"},
|
153
|
+
|
154
|
+
{:text => "1400 Av of the Americas New York",
|
155
|
+
:number => "1400",
|
156
|
+
:street => "Ave of the Americas",
|
157
|
+
:city => "New York"},
|
158
|
+
|
159
|
+
]
|
160
|
+
for fixture in addrs
|
161
|
+
text = fixture.delete(:text)
|
162
|
+
addr = Address.new(text)
|
163
|
+
for key, val in fixture
|
164
|
+
result = addr.send key
|
165
|
+
if result.kind_of? Array
|
166
|
+
result.map! {|str| str.downcase}
|
167
|
+
assert result.member?(val.downcase), "#{text} (#{key}) = #{result.inspect}"
|
168
|
+
else
|
169
|
+
assert_equal val, result, "#{text} (#{key}) = #{result.inspect}"
|
170
|
+
end
|
171
|
+
end
|
172
|
+
end
|
173
|
+
end
|
174
|
+
|
175
|
+
def test_skip_parse
|
176
|
+
addresses = [
|
177
|
+
{:street => "1233 Main St", :city => "Springfield", :region => "VA", :postal_code => "12345", :final_number => "1233", :parsed_street => "main st"},
|
178
|
+
{:street => "somewhere Ln", :city => "Somewhere", :region => "WI", :postal_code => "22222", :number => "402", :parsed_street => "somewhere ln", :final_number => "402"},
|
179
|
+
]
|
180
|
+
for preparsed_address in addresses
|
181
|
+
address_for_geocode = Address.new preparsed_address
|
182
|
+
assert_equal preparsed_address[:parsed_street],address_for_geocode.street[0]
|
183
|
+
assert_equal preparsed_address[:final_number],address_for_geocode.number
|
184
|
+
assert_equal preparsed_address[:city],address_for_geocode.city[0]
|
185
|
+
assert_equal preparsed_address[:region],address_for_geocode.state
|
186
|
+
assert_equal preparsed_address[:postal_code],address_for_geocode.zip
|
187
|
+
end
|
188
|
+
end
|
189
|
+
|
190
|
+
def test_states_abbreviated_in_skip_parse
|
191
|
+
addresses = [
|
192
|
+
{:street => "123 Main St", :city => "Springfield", :region => "Virginia", :postal_code => "12345",:state_abbrev => "VA"},
|
193
|
+
{:street => "402 Somewhere Ln", :city => "Somewhere", :region => "WI", :postal_code => "22222", :state_abbrev => "WI"},
|
194
|
+
]
|
195
|
+
for preparsed_address in addresses
|
196
|
+
address_for_geocode = Address.new preparsed_address
|
197
|
+
assert_equal preparsed_address[:state_abbrev],address_for_geocode.state
|
198
|
+
end
|
199
|
+
|
200
|
+
end
|
201
|
+
|
202
|
+
def test_address_hash
|
203
|
+
addresses = [
|
204
|
+
{:address => "Herndon, VA", :place_check => ["herndon"]},
|
205
|
+
{:address => "Arlington, VA", :place_check => ["arlington"]}
|
206
|
+
]
|
207
|
+
for preparsed_address in addresses
|
208
|
+
address_for_geocode = Address.new preparsed_address
|
209
|
+
assert_equal preparsed_address[:place_check],address_for_geocode.city
|
210
|
+
end
|
211
|
+
end
|
212
|
+
|
213
|
+
def test_partial_address
|
214
|
+
addresses = [
|
215
|
+
{:street => "2200 Wilson Blvd", :postal_code => "22201"},
|
216
|
+
]
|
217
|
+
for preparsed_address in addresses
|
218
|
+
address_for_geocode = Address.new preparsed_address
|
219
|
+
assert_equal preparsed_address[:postal_code],address_for_geocode.zip
|
220
|
+
end
|
221
|
+
|
222
|
+
|
223
|
+
end
|
224
|
+
|
225
|
+
def test_country_parse
|
226
|
+
addresses = [
|
227
|
+
{:city => "Paris", :country => "FR"},
|
228
|
+
]
|
229
|
+
|
230
|
+
for preparsed_address in addresses
|
231
|
+
address_for_geocode = Address.new preparsed_address
|
232
|
+
assert_equal preparsed_address[:country],address_for_geocode.state
|
233
|
+
end
|
234
|
+
end
|
235
|
+
|
236
|
+
end
|
data/tests/benchmark.rb
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
#!/usr/bin/ruby
|
2
|
+
|
3
|
+
require 'test/unit'
|
4
|
+
require 'geocoder/us/database'
|
5
|
+
require 'benchmark'
|
6
|
+
include Benchmark # we need the CAPTION and FMTSTR constants
|
7
|
+
|
8
|
+
db = Geocoder::US::Database.new("/mnt/tiger2008/geocoder.db")
|
9
|
+
|
10
|
+
n = 50
|
11
|
+
s = "1005 Gravenstein Hwy N, Sebastopol CA 95472"
|
12
|
+
a = Geocoder::US::Address.new(s)
|
13
|
+
|
14
|
+
print db.geocode(s)
|
15
|
+
|
16
|
+
Benchmark.bmbm do |x|
|
17
|
+
x.report("parse max_penalty=0") { n.times{a.parse(0)} }
|
18
|
+
x.report("parse max_penalty=1") { n.times{a.parse(1)} }
|
19
|
+
x.report("geocode") { n.times{db.geocode(s)} }
|
20
|
+
end
|
data/tests/constants.rb
ADDED
@@ -0,0 +1,57 @@
|
|
1
|
+
$LOAD_PATH.unshift '../lib'
|
2
|
+
|
3
|
+
require 'test/unit'
|
4
|
+
require 'geocoder/us/constants'
|
5
|
+
|
6
|
+
include Geocoder::US
|
7
|
+
|
8
|
+
class TestConstants < Test::Unit::TestCase
|
9
|
+
def initialize (*args)
|
10
|
+
@map = Map[
|
11
|
+
"Abbreviation" => "abbr",
|
12
|
+
"Two words" => "2words",
|
13
|
+
"Some three words" => "3words"
|
14
|
+
]
|
15
|
+
super(*args)
|
16
|
+
end
|
17
|
+
def test_class_constructor
|
18
|
+
assert_kind_of Map, @map
|
19
|
+
assert_kind_of Hash, @map
|
20
|
+
end
|
21
|
+
def test_key
|
22
|
+
assert @map.key?( "Abbreviation" )
|
23
|
+
assert @map.key?( "abbreviation" )
|
24
|
+
assert !(@map.key? "abbreviation?")
|
25
|
+
assert @map.key?( "abbr" )
|
26
|
+
assert @map.key?( "Two words" )
|
27
|
+
assert @map.key?( "2words" )
|
28
|
+
end
|
29
|
+
def test_fetch
|
30
|
+
assert_equal "abbr", @map["Abbreviation"]
|
31
|
+
assert_equal "abbr", @map["abbreviation"]
|
32
|
+
assert_nil @map["abbreviation?"]
|
33
|
+
assert_equal "abbr", @map["abbr"]
|
34
|
+
assert_equal "2words", @map["Two words"]
|
35
|
+
assert_equal "2words", @map["2words"]
|
36
|
+
end
|
37
|
+
# def test_partial
|
38
|
+
# assert @map.partial?( "Abbreviation" )
|
39
|
+
# assert @map.partial?( "Two" )
|
40
|
+
# assert @map.partial?( "two" )
|
41
|
+
# assert !(@map.partial? "words")
|
42
|
+
# assert @map.partial?( "Some" )
|
43
|
+
# assert !(@map.partial? "words")
|
44
|
+
# assert @map.partial?( "Some three" )
|
45
|
+
# assert @map.partial?( "SOME THREE WORDS" )
|
46
|
+
# end
|
47
|
+
def test_constants
|
48
|
+
assert_kind_of Map, Directional
|
49
|
+
assert_kind_of Map, Prefix_Qualifier
|
50
|
+
assert_kind_of Map, Suffix_Qualifier
|
51
|
+
assert_kind_of Map, Prefix_Type
|
52
|
+
assert_kind_of Map, Suffix_Type
|
53
|
+
assert_kind_of Map, Unit_Type
|
54
|
+
assert_kind_of Map, Name_Abbr
|
55
|
+
assert_kind_of Map, State
|
56
|
+
end
|
57
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
address,number,predir,prequal,pretyp,street,suftyp,sufqual,sufdir,unittyp,unit,city,state,zip,lon,lat,count,comment
|
2
|
+
"93 NORTH 9TH STREET, BROOKLYN NY 11211",93,N,,,9th,St,,,,,Brooklyn,NY,11211,,,,
|
3
|
+
"380 WESTMINSTER ST, PROVIDENCE RI 02903",380,,,,Westminster,St,,,,,Providence,RI,02903,,,,
|
4
|
+
"177 MAIN STREET, LITTLETON NH 03561",177,,,,Main,St,,,,,Littleton,NH,03561,,,,
|
5
|
+
"202 HARLOW ST, BANGOR ME 04401",202,,,,Harlow,St,,,,,Bangor,ME,04401,,,,
|
6
|
+
"46 FRONT STREET, WATERVILLE, ME 04901",46,,,,Front,St,,,,,Waterville,ME,04901,,,,
|
7
|
+
"22 SUSSEX ST, HACKENSACK NJ 07601",22,,,,Sussex,St,,,,,Hackensack,NJ,07601,,,,
|
8
|
+
"75 OAK STREET, PATCHOGUE NY 11772",75,,,,Oak,St,,,,,Patchogue,NY,11772,,,,
|
9
|
+
"1 CLINTON AVE, ALBANY NY 12207",1,,,,Clinton,Ave,,,,,Albany,NY,12207,,,,
|
10
|
+
"7242 ROUTE 9, PLATTSBURGH NY 12901",7242,,,US Hwy,9,,,,,,Plattsburgh,NY,12901,,,,
|
11
|
+
"520 5TH AVE, MCKEESPORT PA 15132",520,,,,5th,Ave,,,,,McKeesport,PA,15132,,,,
|
12
|
+
"122 W 3RD STREET, GREENSBURG PA 15601",122,W,,,3rd,St,,,,,Greensburg,PA,15601,,,,
|
13
|
+
"901 UNIVERSITY DR, STATE COLLEGE PA 16801",901,,,,University,Dr,,,,,"State College",PA,16801,,,,
|
14
|
+
"240 W 3RD ST, WILLIAMSPORT PA 17701",240,W,,,3rd,St,,,,,Williamsport,PA,17701,,,,
|
15
|
+
"41 N 4TH ST, ALLENTOWN PA 18102",41,N,,,4th,St,,,,,Allentown,PA,18102,,,,
|
16
|
+
"2221 W. MARKET STREET, POTTSVILLE PA 17901",2221,W,,,Market,St,,,,,Pottsville,PA,17901,,,,
|
17
|
+
"337 BRIGHTSEAT ROAD, LANDOVER MD 20785",337,,,,Brightseat,Rd,,,,,Hyattsville,MD,20785,,,,"canonical place"
|
18
|
+
"101 CHESAPEAKE BLVD, ELKTON MD 21921",103,,,,Chesapeake,Blvd,,,,,Elkton,MD,21921,,,,"find nearest corner"
|
19
|
+
"2875 SABRE ST, VIRGINIA BEACH VA 23452",2809,,,,Sabre,St,,,,,"Virginia Beach",VA,23452,,,,"find nearest corner"
|
20
|
+
"324 COMMERCE ROAD, FARMVILLE VA 23901",324,,,,Commerce,St,,,,,Clarksville,VA,23927,,,,"nearby address; might be TIGER omission"
|
21
|
+
"1480 EAST MAIN STREET, WYTHEVILLE VA 24382",1480,W,,,Main,St,,,,,Wytheville,VA,24382,,,,"nearby address; TIGER omission"
|
22
|
+
"116 N JEFFERSON STREET, ROANOKE VA 24016",116,N,,,Jefferson,St,,,,,Roanoke,VA,24016,,,,
|
23
|
+
"50 MCDOWELL STREET, WELCH WV 24801",50,,,,"Mc Dowell",St,,,,,Welch,WV,24801,,,,
|
24
|
+
"146 EAST FIRST AVE, WILLIAMSON WV 25661",200,E,,,1st,Ave,,,,,Williamson,WV,25661,,,,"find nearest corner"
|
25
|
+
"1925 E MAIN ST, ALBEMARLE NC 28001",1925,E,,,Main,St,,,,,Albemarle,NC,28001,,,,
|
26
|
+
"1013 SPRING LANE, SANFORD NC 27330",1013,,,,Spring,Ln,,,,,Sanford,NC,27330,,,,
|
27
|
+
"145 ROWAN STREET, FAYETTEVILLE NC 28301",145,,,,Rowan,St,,,,,Fayetteville,NC,28301,,,,
|
28
|
+
"1420 MCCARTHY BLVD, NEW BERN NC 28562",1420,,,,McCarthy,Blvd,,,,,"New Bern",NC,28562,,,,
|
29
|
+
"115 ENTERPRISE COURT, GREENWOOD SC 29649",115,,,,Enterprise,Ct,,,,,Greenwood,SC,29649,,,,
|
30
|
+
"732 W 2ND ST, TIFTON GA 31794",732,,,,2nd,St,,W,,,Tifton,GA,31793,,,,"TIGER artifact"
|
31
|
+
"97 WEST OAK AVE, PANAMA CITY FL 32401",97,,,,Oak,Ave,,,,,"Panama City",FL,32401,,,,"predir is TIGER artifact"
|
32
|
+
"2276 WILTON DR, WILTON MANORS FL 33305",2276,,,,Wilton,Dr,,,,,"Fort Lauderdale",FL,33305,,,,"canonical place"
|
33
|
+
"203 SOUTH WALNUT ST, FLORENCE AL 35630",203,S,,,Walnut,St,,,,,Florence,AL,35630,,,,
|
34
|
+
"108 CENTER POINTE DR, CLARKSVILLE TN 37040",108,,,,"Center Pointe",Dr,,,,,Clarksville,TN,37040,,,,
|
35
|
+
"1800 OLD TROY RD, UNION CITY TN 38261",1800,,Old,,Troy,Rd,,,,,"Union City",TN,38261,,,,
|
36
|
+
"931 OLD SMITHVILLE HWY, MCMINNVILLE TN 37110",931,,Old,,Smithville,Rd,,,,,McMinnville,TN,37110,,,,
|
37
|
+
"1301 GREENE STREET, MARIETTA OH 45750",1301,,,,Greene,St,,,,,Marietta,OH,45750,,,,
|
38
|
+
"602 SOUTH MICHIGAN ST, SOUTH BEND IN 46601",602,S,,,Michigan,St,,,,,"South Bend",IN,46601,,,,
|
39
|
+
"500 NORTH A STREET, RICHMOND IN 47374",500,N,,,A,St,,,,,Richmond,IN,47374,,,,
|
40
|
+
"317 SOUTH DRAKE ROAD, KALAMAZOO MI 49009",317,S,,,Drake,Rd,,,,,Kalamazoo,MI,49009,,,,
|
41
|
+
"105 Amity Way, Wayne PA 19087",105,,,,Amity,Dr,,,,,Wayne,PA,19087,,,,
|
42
|
+
"305 W 45th St, New York NY 10036",305,W,,,45,St,,,,,"New York",NY,10036,,,,
|
43
|
+
"11839 Federalist Way, Fairfax VA 22030",11839,,,,Federalist,Way,,,,,Fairfax,VA,22030,,,,
|
44
|
+
"400 Monroe St, Hoboken, NJ 07030",400,,,,Monroe,St,,,,,Hoboken,NJ,07030,,,,
|
45
|
+
"101 West End Avenue, New York NY 10023",101,W,,,End,Ave,,,,,"New York",NY,10023,,,,"predir is TIGER artifact"
|
46
|
+
"2900 4TH AVE, BILLINGS MT 59101",2900,,,,4th,Ave,,N,,,Billings,MT,59101,,,,"returns 2 results"
|
47
|
+
"158 N SCOTT STREET, JOLIET IL 60432",158,N,,,Scott,St,,,,,Joliet,IL,60432,,,,
|
48
|
+
"1207 NETWORK CENTRE DR, EFFINGHAM IL 62401",1207,,,,"Network Centre",Dr,,,,,Effingham,IL,62401,,,,
|
49
|
+
"3555 SOUTHERN HILLS DR, SIOUX CITY IA 51106",3555,,,,"Southern Hills",Dr,,,,,"Sioux City",IA,51106,,,,
|
50
|
+
"300 E 3RD ST, NORTH PLATTE NE 69101",300,E,,,3rd,St,,,,,"North Platte",NE,69101,,,,
|
51
|
+
"115 N WEBB RD, GRAND ISLAND NE 68803",115,N,,,Webb,Rd,,,,,"Grand Island",NE,68803,,,,
|
52
|
+
"415 VALLEY VIEW DR, SCOTTSBLUFF NE 69361",501,,,,"Valley View",Dr,,,,,"Scotts Bluff",NE,69361,,,,"find nearest corner"
|
@@ -0,0 +1,57 @@
|
|
1
|
+
"address","number","street","city","state","zip","lon","lat","count","comment"
|
2
|
+
"93 NORTH 9TH STREET, BROOKLYN NY 11211",93,N 9th St,Brooklyn,NY,11211,-73.95892,40.720361,1,
|
3
|
+
"380 WESTMINSTER ST, PROVIDENCE RI 02903",380,Westminster St,Providence,RI,02903,-71.414872,41.82126,1,
|
4
|
+
"177 MAIN STREET, LITTLETON NH 03561",177,Main St,Littleton,NH,03561,-71.77646,44.307516,1,range
|
5
|
+
"202 HARLOW ST, BANGOR ME 04401",202,Harlow St,Bangor,ME,04401,-68.773178,44.804885,1,
|
6
|
+
"46 FRONT STREET, WATERVILLE, ME 04901",46,Front St,Waterville,ME,04901,-69.628535,44.550875,1,
|
7
|
+
"22 SUSSEX ST, HACKENSACK NJ 07601",22,Sussex St,Hackensack,NJ,07601,-74.046952,40.880046,1,
|
8
|
+
"75 OAK STREET, PATCHOGUE NY 11772",75,Oak St,Patchogue,NY,11772,-73.011289,40.76813,1,
|
9
|
+
"1 CLINTON AVE, ALBANY NY 12207",1,Clinton Ave,Albany,NY,12207,-73.748853,42.653821,1,
|
10
|
+
"7242 ROUTE 9, PLATTSBURGH NY 12901",7242,US Hwy 9,Plattsburgh,NY,12901,-73.425181,44.741501,1,
|
11
|
+
"520 5TH AVE, MCKEESPORT PA 15132",520,5th Ave,McKeesport,PA,15132,-79.861617,40.351269,1,
|
12
|
+
"122 W 3RD STREET, GREENSBURG PA 15601",122,W 3rd St,Greensburg,PA,15601,-79.545833,40.29984,1,
|
13
|
+
"901 UNIVERSITY DR, STATE COLLEGE PA 16801",901,University Dr,State College,PA,16801,-77.845018,40.797574,1,
|
14
|
+
"240 W 3RD ST, WILLIAMSPORT PA 17701",240,W 3rd St,Williamsport,PA,17701,-77.004837,41.239267,1,
|
15
|
+
"41 N 4TH ST, ALLENTOWN PA 18102",41,N 4th St,Allentown,PA,18102,-75.465652,40.604528,1,
|
16
|
+
"2221 W. MARKET STREET, POTTSVILLE PA 17901",2221,W Market St,Pottsville,PA,17901,-76.22596,40.674952,1,
|
17
|
+
"337 BRIGHTSEAT ROAD, LANDOVER MD 20785",337,Brightseat Rd,Hyattsville,MD,20785,-76.850929,38.893382,1,canonical place
|
18
|
+
"101 CHESAPEAKE BLVD, ELKTON MD 21921",103,Chesapeake Blvd,Elkton,MD,21921,-75.787244,39.605795,1,find nearest corner
|
19
|
+
"2875 SABRE ST, VIRGINIA BEACH VA 23452",2809,Sabre St,Virginia Beach,VA,23452,-76.068511,36.822897,1,find nearest corner
|
20
|
+
"324 COMMERCE ROAD, FARMVILLE VA 23901",324,Commerce St,Clarksville,VA,23927,-78.55251,36.622205,1,nearby address; might be TIGER omission
|
21
|
+
"1480 EAST MAIN STREET, WYTHEVILLE VA 24382",1168,E Main St,Wytheville,VA,24382,-81.069279,36.951346,1,nearby address; TIGER omission
|
22
|
+
"116 N JEFFERSON STREET, ROANOKE VA 24016",116,N Jefferson St,Roanoke,VA,24016,-79.940484,37.274388,1,
|
23
|
+
"50 MCDOWELL STREET, WELCH WV 24801",50,Mc Dowell St,Welch,WV,24801,-81.58558,37.433227,1,
|
24
|
+
"146 EAST FIRST AVE, WILLIAMSON WV 25661",200,E 1st Ave,Williamson,WV,25661,-82.277028,37.670255,1,find nearest corner
|
25
|
+
"1925 E MAIN ST, ALBEMARLE NC 28001",1925,E Main St,Albemarle,NC,28001,-80.16389,35.348749,1,
|
26
|
+
"1013 SPRING LANE, SANFORD NC 27330",1013,Spring Ln,Sanford,NC,27330,-79.198602,35.487517,1,
|
27
|
+
"145 ROWAN STREET, FAYETTEVILLE NC 28301",145,Rowan St,Fayetteville,NC,28301,-78.878159,35.0577,1,
|
28
|
+
"1420 MCCARTHY BLVD, NEW BERN NC 28562",1420,McCarthy Blvd,New Bern,NC,28562,-77.094959,35.097715,1,
|
29
|
+
"115 ENTERPRISE COURT, GREENWOOD SC 29649",115,Enterprise Ct,Greenwood,SC,29649,-82.165438,34.217807,1,
|
30
|
+
"732 W 2ND ST, TIFTON GA 31794",732,W 2nd St,Tifton,GA,31793,-83.529553,31.457994,1,ZIP is wrong
|
31
|
+
"97 WEST OAK AVE, PANAMA CITY FL 32401",97,W Oak Ave,Panama City,FL,32401,-85.662232,30.155214,1,
|
32
|
+
"2276 WILTON DR, WILTON MANORS FL 33305",2276,Wilton Dr,Fort Lauderdale,FL,33305,-80.137418,26.157,1,canonical place
|
33
|
+
"203 SOUTH WALNUT ST, FLORENCE AL 35630",203,S Walnut St,Florence,AL,35630,-87.671379,34.800936,1,
|
34
|
+
"108 CENTER POINTE DR, CLARKSVILLE TN 37040",108,Center Pointe Dr,Clarksville,TN,37040,-87.308915,36.569738,1,
|
35
|
+
"1800 OLD TROY RD, UNION CITY TN 38261",1800,Old Troy Rd,Union City,TN,38261,-89.093706,36.417762,1,
|
36
|
+
"931 OLD SMITHVILLE HWY, MCMINNVILLE TN 37110",931,Old Smithville Rd,McMinnville,TN,37110,-85.788226,35.701451,1,
|
37
|
+
"1301 GREENE STREET, MARIETTA OH 45750",1301,Greene St,Marietta,OH,45750,-81.424821,39.426052,1,
|
38
|
+
"602 SOUTH MICHIGAN ST, SOUTH BEND IN 46601",602,S Michigan St,South Bend,IN,46601,-86.250221,41.669598,1,
|
39
|
+
"500 NORTH A STREET, RICHMOND IN 47374",500,N A St,Richmond,IN,47374,-84.89517,39.830625,1,
|
40
|
+
"317 SOUTH DRAKE ROAD, KALAMAZOO MI 49009",317,S Drake Rd,Kalamazoo,MI,49009,-85.648231,42.289145,1,
|
41
|
+
"105 Amity Way, Wayne PA 19087",105,Amity Dr,Wayne,PA,19087,-75.455493,40.076415,1,
|
42
|
+
"305 W 45th St, New York NY 10036",305,W 45 St,New York,NY,10036,-73.988479,40.759213,1,
|
43
|
+
"11839 Federalist Way, Fairfax VA 22030",11839,Federalist Way,Fairfax,VA,22030,-77.354157,38.850052,1,
|
44
|
+
"400 Monroe St, Hoboken, NJ 07030",400,Monroe St,Hoboken,NJ,07030,-74.038949,40.742849,1,
|
45
|
+
"101 West End Avenue, New York NY 10023",101,W End Ave,New York,NY,10023,-73.98815,40.774788,1,predir is TIGER artifact
|
46
|
+
"2900 4TH AVE, BILLINGS MT 59101",2900,4th Ave S,Billings,MT,59101,-108.501942,45.776389,2,returns 2 results
|
47
|
+
"158 N SCOTT STREET, JOLIET IL 60432",158,N Scott St,Joliet,IL,60432,-88.080155,41.526524,1,
|
48
|
+
"1207 NETWORK CENTRE DR, EFFINGHAM IL 62401",1207,Network Centre Dr,Effingham,IL,62401,-88.524714,39.145835,1,
|
49
|
+
"3555 SOUTHERN HILLS DR, SIOUX CITY IA 51106",3555,Southern Hills Dr,Sioux City,IA,51106,-96.353207,42.448741,1,
|
50
|
+
"300 E 3RD ST, NORTH PLATTE NE 69101",300,E 3rd St,North Platte,NE,69101,-100.761028,41.135235,1,
|
51
|
+
"115 N WEBB RD, GRAND ISLAND NE 68803",115,N Webb Rd,Grand Island,NE,68803,-98.378432,40.917192,1,
|
52
|
+
"415 VALLEY VIEW DR, SCOTTSBLUFF NE 69361",501,Valley View Dr,Scotts Bluff,NE,69361,-103.656078,41.879011,1,find nearest corner
|
53
|
+
"4018 W Ustick Rd, Meridian ID",4413,W Ustick Rd,Nampa,ID,83687,-116.479463,43.634111,1,street
|
54
|
+
"129 E Williams Field Rd, Gilbert AZ 85295",800,E Williams Field Rd,Gilbert,AZ,85295,-111.772768,33.306601,1,street
|
55
|
+
"2518 S Pacific Hwy, Medford OR",2499,S Pacific Hwy,Medford,OR,97501,-122.849335,42.301566,1,street
|
56
|
+
"1111 River Rd Apt A17, Edgewater NJ 07020",1111,River Rd,Edgewater,NJ,07020,-73.972523,40.832584,1,FIXME: parsing
|
57
|
+
"460 West St, Amherst MA 01002-2964",460,West St,Amherst,MA,01002,-72.519936,42.341085,1,address is all abbreviations
|
data/tests/database.rb
ADDED
@@ -0,0 +1,137 @@
|
|
1
|
+
$LOAD_PATH.unshift '../lib'
|
2
|
+
|
3
|
+
require 'test/unit'
|
4
|
+
require 'geocoder/us/database'
|
5
|
+
require 'csv'
|
6
|
+
|
7
|
+
Base = File.dirname(__FILE__)
|
8
|
+
|
9
|
+
module Geocoder::US
|
10
|
+
Database_File = (
|
11
|
+
(ARGV[0] and !ARGV[0].empty?) ? ARGV[0] : "../geocoderdata/geocoder.db")
|
12
|
+
end
|
13
|
+
|
14
|
+
class TestDatabase < Test::Unit::TestCase
|
15
|
+
def get_db
|
16
|
+
Geocoder::US::Database.new(Geocoder::US::Database_File, {:debug => true})
|
17
|
+
|
18
|
+
end
|
19
|
+
|
20
|
+
def get_international_db
|
21
|
+
Geocoder::US::Database.new("/Users/katechapman/Desktop/geonames1.db", {:debug => true})
|
22
|
+
end
|
23
|
+
|
24
|
+
def setup
|
25
|
+
@db = get_db
|
26
|
+
@db_intl = get_international_db
|
27
|
+
assert_not_nil @db_intl
|
28
|
+
assert_not_nil @db
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_load
|
32
|
+
return if @db.nil?
|
33
|
+
assert_kind_of Geocoder::US::Database, @db
|
34
|
+
end
|
35
|
+
|
36
|
+
def test_zip
|
37
|
+
return if @db.nil?
|
38
|
+
[ {:city=>"Chicago", :zip=>"60601", :state=>"IL", :precision=>:zip,
|
39
|
+
:fips_county=>"17031", :lon=>"-87.68732", :lat=>"41.811929", :score => 0.714},
|
40
|
+
{:city=>"Philadelphia", :zip=>"19019", :state=>"PA", :precision=>:zip,
|
41
|
+
:fips_county=>"42101", :lon=>"-75.11787", :lat=>"40.001811", :score => 0.714}
|
42
|
+
].each {|record|
|
43
|
+
result = @db.geocode(record[:zip])
|
44
|
+
assert_equal result.length, 1
|
45
|
+
record.keys.each {|key| assert_equal record[key], result[0][key]}
|
46
|
+
}
|
47
|
+
|
48
|
+
end
|
49
|
+
|
50
|
+
def test_international_place
|
51
|
+
return if @db_intl.nil?
|
52
|
+
[ {:city=>"Paris", :state=>"FR"},
|
53
|
+
{:city=>"Paris", :state=>"FR"}
|
54
|
+
].each {|record|
|
55
|
+
result = @db_intl.geocode(record)
|
56
|
+
assert_equal result.length, 1
|
57
|
+
record.keys.each {|key| assert_equal record[key], result[0][key]}
|
58
|
+
}
|
59
|
+
end
|
60
|
+
|
61
|
+
def test_place
|
62
|
+
return if @db.nil?
|
63
|
+
[ {:city=>"Chicago", :state=>"IL", :precision=>:city, :fips_county=>"17031", :score => 0.857},
|
64
|
+
{:city=>"Philadelphia", :state=>"PA", :precision=>:city, :fips_county=>"42101", :score => 0.857}
|
65
|
+
].each {|record|
|
66
|
+
result = @db.geocode(record[:city] + ", " + record[:state])
|
67
|
+
assert_equal result.length, 1
|
68
|
+
record.keys.each {|key| assert_equal record[key], result[0][key]}
|
69
|
+
}
|
70
|
+
|
71
|
+
end
|
72
|
+
|
73
|
+
def test_international_place
|
74
|
+
return if @db_intl.nil?
|
75
|
+
[ {:city=>"Kabul", :state=>"AF", :precision=>:city},
|
76
|
+
{:city=>"Paris", :state=>"FR", :precision=>:city}
|
77
|
+
].each {|record|
|
78
|
+
result = @db_intl.geocode({:city => record[:city] , :state => record[:state]})
|
79
|
+
puts result
|
80
|
+
assert_equal result.length, 1
|
81
|
+
record.keys.each {|key| assert_equal record[key], result[0][key]}
|
82
|
+
}
|
83
|
+
end
|
84
|
+
|
85
|
+
def test_sample
|
86
|
+
return if @db.nil?
|
87
|
+
CSV.foreach(Base + "/data/db-test.csv", {:headers=>true}) do |row|
|
88
|
+
result = @db.geocode(row[0], true)
|
89
|
+
result[0][:count] = result.map{|a|[a[:lat], a[:lon]]}.to_set.length
|
90
|
+
fields = row.headers - ["comment", "address"]
|
91
|
+
fields.each {|f|
|
92
|
+
sample = row[f] || ""
|
93
|
+
given = result[0][f.to_sym] || ""
|
94
|
+
sample = sample.to_f if given.kind_of? Float or given.kind_of? Fixnum
|
95
|
+
assert_equal sample, given, "row: #{row.inspect}\nfield: #{f.inspect} sample: #{sample.inspect}, given: #{given.inspect}"
|
96
|
+
|
97
|
+
}
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
def test_should_get_street_number_correctly
|
102
|
+
result = @db.geocode("460 West St, Amherst MA 01002-2964", true)
|
103
|
+
puts "all results=#{result.inspect}"
|
104
|
+
assert_equal '460', result[0][:number]
|
105
|
+
end
|
106
|
+
|
107
|
+
def test_should_geocode_with_hash
|
108
|
+
result = @db.geocode({:street => "2200 Wilson Blvd", :city => "Arlington", :region => "VA", :postal_code => "22201"}, true)
|
109
|
+
result2 = @db.geocode("2200 Wilson Blvd, Arlington, VA 22201")
|
110
|
+
assert_equal result2,result
|
111
|
+
end
|
112
|
+
|
113
|
+
def test_should_work_with_partial_hash
|
114
|
+
result = @db.geocode({:street => "2200 Wilson Blvd", :postal_code => "22201"})
|
115
|
+
assert_equal result[0][:precision],:range
|
116
|
+
end
|
117
|
+
|
118
|
+
def test_weird_edge_case_explosion
|
119
|
+
result = @db.geocode({:street => "1410 Spring Hill Rd", :postal_code => "20221"})
|
120
|
+
result1 = @db.geocode(:street => "402 Valley View Ave", :postal_code => "12345")
|
121
|
+
assert_equal result[0][:precision],:zip
|
122
|
+
end
|
123
|
+
|
124
|
+
def test_city_state_together
|
125
|
+
result = @db.geocode({:city => "Richmond", :state => "IN"})
|
126
|
+
assert_equal result[0][:precision],:city
|
127
|
+
end
|
128
|
+
|
129
|
+
def test_state_street_together
|
130
|
+
result = @db.geocode({:region => "VA", :street => "14333 Lee Jackson Memorial Hwy"})
|
131
|
+
#assert_equal result[0][:precision],:range
|
132
|
+
end
|
133
|
+
|
134
|
+
|
135
|
+
|
136
|
+
|
137
|
+
end
|