geokit 1.6.5 → 1.6.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +15 -0
- data/.gitignore +9 -0
- data/.travis.yml +13 -0
- data/CHANGELOG.md +92 -0
- data/Gemfile +4 -0
- data/LICENSE +25 -0
- data/Manifest.txt +21 -0
- data/README.markdown +179 -176
- data/Rakefile +8 -1
- data/ext/mkrf_conf.rb +15 -0
- data/geokit.gemspec +33 -0
- data/lib/geokit/geocoders.rb +7 -774
- data/lib/geokit/inflectors.rb +38 -0
- data/lib/geokit/mappable.rb +61 -3
- data/lib/geokit/multi_geocoder.rb +61 -0
- data/lib/geokit/services/ca_geocoder.rb +55 -0
- data/lib/geokit/services/fcc.rb +57 -0
- data/lib/geokit/services/geo_plugin.rb +31 -0
- data/lib/geokit/services/geonames.rb +53 -0
- data/lib/geokit/services/google.rb +158 -0
- data/lib/geokit/services/google3.rb +202 -0
- data/lib/geokit/services/ip.rb +103 -0
- data/lib/geokit/services/openstreetmap.rb +119 -0
- data/lib/geokit/services/us_geocoder.rb +50 -0
- data/lib/geokit/services/yahoo.rb +75 -0
- data/lib/geokit/version.rb +3 -0
- data/test/helper.rb +92 -0
- data/test/test_base_geocoder.rb +1 -15
- data/test/test_bounds.rb +1 -2
- data/test/test_ca_geocoder.rb +1 -1
- data/test/test_geoloc.rb +35 -5
- data/test/test_geoplugin_geocoder.rb +1 -2
- data/test/test_google_geocoder.rb +39 -2
- data/test/test_google_geocoder3.rb +55 -3
- data/test/test_google_reverse_geocoder.rb +1 -1
- data/test/test_inflector.rb +5 -3
- data/test/test_ipgeocoder.rb +25 -1
- data/test/test_latlng.rb +1 -3
- data/test/test_multi_geocoder.rb +1 -1
- data/test/test_multi_ip_geocoder.rb +1 -1
- data/test/test_openstreetmap_geocoder.rb +161 -0
- data/test/test_polygon_contains.rb +101 -0
- data/test/test_us_geocoder.rb +1 -1
- data/test/test_yahoo_geocoder.rb +18 -1
- metadata +164 -83
data/test/test_ipgeocoder.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
# encoding: utf-8
|
2
|
-
require File.join(File.dirname(__FILE__), '
|
2
|
+
require File.join(File.dirname(__FILE__), 'helper')
|
3
3
|
|
4
4
|
class IpGeocoderTest < BaseGeocoderTest #:nodoc: all
|
5
5
|
|
@@ -17,6 +17,13 @@ class IpGeocoderTest < BaseGeocoderTest #:nodoc: all
|
|
17
17
|
Longitude: -88.4588
|
18
18
|
EOF
|
19
19
|
|
20
|
+
IP_LATIN=<<-EOF
|
21
|
+
Country: BRAZIL (BR)
|
22
|
+
City: S\xE3o Jos\xE9 do Rio Pr\xEAto\n
|
23
|
+
Latitude: -20.8
|
24
|
+
Longitude: -49.3833
|
25
|
+
EOF
|
26
|
+
|
20
27
|
IP_UNICODED=<<-EOF
|
21
28
|
Country: SWEDEN (SE)
|
22
29
|
City: Borås
|
@@ -73,6 +80,23 @@ class IpGeocoderTest < BaseGeocoderTest #:nodoc: all
|
|
73
80
|
assert location.success?
|
74
81
|
end
|
75
82
|
|
83
|
+
def test_non_unicoded_lookup
|
84
|
+
success = MockSuccess.new
|
85
|
+
success.stubs(:body).returns(IP_LATIN)
|
86
|
+
success.stubs(:[]).with('content-type').returns('text/plain; charset=iso-8859-1')
|
87
|
+
url = 'http://api.hostip.info/get_html.php?ip=201.23.177.144&position=true'
|
88
|
+
GeoKit::Geocoders::IpGeocoder.expects(:call_geocoder_service).with(url).returns(success)
|
89
|
+
location = GeoKit::Geocoders::IpGeocoder.geocode('201.23.177.144')
|
90
|
+
assert_not_nil location
|
91
|
+
assert_equal -20.8, location.lat
|
92
|
+
assert_equal -49.3833, location.lng
|
93
|
+
assert_equal "São José Do Rio Prêto", location.city
|
94
|
+
assert_nil location.state
|
95
|
+
assert_equal "BR", location.country_code
|
96
|
+
assert_equal "hostip", location.provider
|
97
|
+
assert location.success?
|
98
|
+
end
|
99
|
+
|
76
100
|
def test_failed_lookup
|
77
101
|
failure = MockSuccess.new
|
78
102
|
failure.expects(:body).returns(IP_FAILURE)
|
data/test/test_latlng.rb
CHANGED
data/test/test_multi_geocoder.rb
CHANGED
@@ -0,0 +1,161 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require File.join(File.dirname(__FILE__), 'helper')
|
3
|
+
|
4
|
+
Geokit::Geocoders::osm = 'OSM'
|
5
|
+
|
6
|
+
class OSMGeocoderTest < BaseGeocoderTest #:nodoc: all
|
7
|
+
OSM_FULL=<<-EOF.strip
|
8
|
+
[{"place_id":"425554497","licence":"Data Copyright OpenStreetMap Contributors, Some Rights Reserved. CC-BY-SA 2.0.","boundingbox":["37.792341","37.792441","-122.394074","-122.393974"],"lat":"37.792391","lon":"-122.394024","display_name":"100, Spear Street, Financial District, San Francisco, California, 94105, United States of America","class":"place","type":"house","address":{"house_number":"100","road":"Spear Street","place":"Financial District","city":"San Francisco","county":"San Francisco","state":"California","postcode":"94105","country":"United States of America","country_code":"us"}}]
|
9
|
+
EOF
|
10
|
+
|
11
|
+
|
12
|
+
OSM_CITY=<<-EOF.strip
|
13
|
+
[{"place_id":"1586484","licence":"Data Copyright OpenStreetMap Contributors, Some Rights Reserved. CC-BY-SA 2.0.","osm_type":"node","osm_id":"316944780","boundingbox":["37.7240965271","37.744100341797","-122.40126586914","-122.38125823975"],"lat":"37.7340974","lon":"-122.3912596","display_name":"San Francisco, California, United States of America","class":"place","type":"county","icon":"http://nominatim.openstreetmap.org/images/mapicons/poi_boundary_administrative.p.20.png","address":{"county":"San Francisco","state":"California","country":"United States of America","country_code":"us"}},{"place_id":"42109083","licence":"Data Copyright OpenStreetMap Contributors, Some Rights Reserved. CC-BY-SA 2.0.","osm_type":"way","osm_id":"33090874","boundingbox":["37.6398277282715","37.8230590820312","-123.173828125","-122.935707092285"],"lat":"37.7333682068208","lon":"-123.051926367593","display_name":"San Francisco, Marin, California, United States of America","class":"place","type":"city","icon":"http://nominatim.openstreetmap.org/images/mapicons/poi_place_city.p.20.png","address":{"city":"San Francisco","county":"Marin","state":"California","country":"United States of America","country_code":"us"}},{"place_id":"145970","licence":"Data Copyright OpenStreetMap Contributors, Some Rights Reserved. CC-BY-SA 2.0.","osm_type":"node","osm_id":"26819236","boundingbox":["37.768957366943","37.788961181641","-122.42920471191","-122.40919708252"],"lat":"37.7789601","lon":"-122.419199","display_name":"San Francisco, San Francisco County, California, United States of America, North America","class":"place","type":"city","icon":"http://nominatim.openstreetmap.org/images/mapicons/poi_place_city.p.20.png","address":{"city":"San Francisco","county":"San Francisco County","state":"California","country":"United States of America","country_code":"us","place":"North America"}},{"place_id":"42108900","licence":"Data Copyright OpenStreetMap Contributors, Some Rights Reserved. CC-BY-SA 2.0.","osm_type":"way","osm_id":"33090814","boundingbox":["37.7067184448242","37.9298248291016","-122.612289428711","-122.281776428223"],"lat":"37.7782304646168","lon":"-122.442503042395","display_name":"San Francisco, San Francisco County, California, United States of America","class":"place","type":"city","icon":"http://nominatim.openstreetmap.org/images/mapicons/poi_place_city.p.20.png","address":{"city":"San Francisco","county":"San Francisco County","state":"California","country":"United States of America","country_code":"us"}}]
|
14
|
+
EOF
|
15
|
+
|
16
|
+
OSM_REVERSE_MADRID=<<-EOF.strip
|
17
|
+
{"place_id":"41067113","licence":"Data Copyright OpenStreetMap Contributors, Some Rights Reserved. CC-BY-SA 2.0.","osm_type":"way","osm_id":"31822457","lat":"40.3787537310091","lon":"-3.70187699287946","display_name":"Línea 3, Calle del Doctor Tolosa Latour, Usera, Madrid, 28026, Spain","address":{"subway":"Línea 3","road":"Calle del Doctor Tolosa Latour","suburb":"Usera","city_district":"Usera","city":"Madrid","county":"Madrid","state":"Madrid","postcode":"28026","country":"Spain","country_code":"es"}}
|
18
|
+
EOF
|
19
|
+
|
20
|
+
OSM_REVERSE_PRILEP=<<-EOF.strip
|
21
|
+
{"place_id":"46960069","licence":"Data Copyright OpenStreetMap Contributors, Some Rights Reserved. CC-BY-SA 2.0.","osm_type":"way","osm_id":"39757255","lat":"41.3508581896005","lon":"21.549896984439","display_name":"Gimnasium Mirche Acev, Marksova, Prilep, Macedonia","address":{"school":"Gimnasium Mirche Acev","road":"Marksova","city":"Prilep","country":"Macedonia","country_code":"mk"}}
|
22
|
+
EOF
|
23
|
+
|
24
|
+
def setup
|
25
|
+
super
|
26
|
+
@osm_full_hash = {:street_address=>"100 Spear St", :city=>"San Francisco", :state=>"CA", :zip=>"94105", :country_code=>"US"}
|
27
|
+
@osm_city_hash = {:city=>"San Francisco", :state=>"CA"}
|
28
|
+
@osm_full_loc = Geokit::GeoLoc.new(@osm_full_hash)
|
29
|
+
@osm_city_loc = Geokit::GeoLoc.new(@osm_city_hash)
|
30
|
+
end
|
31
|
+
|
32
|
+
# the testing methods themselves
|
33
|
+
def test_osm_full_address
|
34
|
+
response = MockSuccess.new
|
35
|
+
response.expects(:body).returns(OSM_FULL)
|
36
|
+
url="http://nominatim.openstreetmap.org/search?format=json&polygon=0&addressdetails=1&q=#{Geokit::Inflector.url_escape(@full_address_short_zip)}"
|
37
|
+
Geokit::Geocoders::OSMGeocoder.expects(:call_geocoder_service).with(url).returns(response)
|
38
|
+
do_full_address_assertions(Geokit::Geocoders::OSMGeocoder.geocode(@full_address_short_zip))
|
39
|
+
end
|
40
|
+
|
41
|
+
def test_osm_full_address_accuracy
|
42
|
+
response = MockSuccess.new
|
43
|
+
response.expects(:body).returns(OSM_FULL)
|
44
|
+
url="http://nominatim.openstreetmap.org/search?format=json&polygon=0&addressdetails=1&q=#{Geokit::Inflector.url_escape(@full_address_short_zip)}"
|
45
|
+
Geokit::Geocoders::OSMGeocoder.expects(:call_geocoder_service).with(url).returns(response)
|
46
|
+
res = Geokit::Geocoders::OSMGeocoder.geocode(@full_address_short_zip)
|
47
|
+
assert_equal 'house', res.accuracy
|
48
|
+
end
|
49
|
+
|
50
|
+
def test_osm_full_address_with_geo_loc
|
51
|
+
response = MockSuccess.new
|
52
|
+
response.expects(:body).returns(OSM_FULL)
|
53
|
+
url="http://nominatim.openstreetmap.org/search?format=json&polygon=0&addressdetails=1&q=#{Geokit::Inflector.url_escape(@full_address_short_zip)}"
|
54
|
+
Geokit::Geocoders::OSMGeocoder.expects(:call_geocoder_service).with(url).returns(response)
|
55
|
+
do_full_address_assertions(Geokit::Geocoders::OSMGeocoder.geocode(@osm_full_loc))
|
56
|
+
end
|
57
|
+
|
58
|
+
def test_osm_city
|
59
|
+
response = MockSuccess.new
|
60
|
+
response.expects(:body).returns(OSM_CITY)
|
61
|
+
url="http://nominatim.openstreetmap.org/search?format=json&polygon=0&addressdetails=1&q=#{Geokit::Inflector.url_escape(@address)}"
|
62
|
+
Geokit::Geocoders::OSMGeocoder.expects(:call_geocoder_service).with(url).returns(response)
|
63
|
+
do_city_assertions(Geokit::Geocoders::OSMGeocoder.geocode(@address))
|
64
|
+
end
|
65
|
+
|
66
|
+
def test_osm_city_accuracy
|
67
|
+
response = MockSuccess.new
|
68
|
+
response.expects(:body).returns(OSM_CITY)
|
69
|
+
url="http://nominatim.openstreetmap.org/search?format=json&polygon=0&addressdetails=1&q=#{Geokit::Inflector.url_escape(@address)}"
|
70
|
+
Geokit::Geocoders::OSMGeocoder.expects(:call_geocoder_service).with(url).returns(response)
|
71
|
+
res = Geokit::Geocoders::OSMGeocoder.geocode(@address)
|
72
|
+
assert_equal "county", res.accuracy
|
73
|
+
end
|
74
|
+
|
75
|
+
def test_osm_city_with_geo_loc
|
76
|
+
response = MockSuccess.new
|
77
|
+
response.expects(:body).returns(OSM_CITY)
|
78
|
+
url="http://nominatim.openstreetmap.org/search?format=json&polygon=0&addressdetails=1&q=#{Geokit::Inflector.url_escape(@address)}"
|
79
|
+
Geokit::Geocoders::OSMGeocoder.expects(:call_geocoder_service).with(url).returns(response)
|
80
|
+
do_city_assertions(Geokit::Geocoders::OSMGeocoder.geocode(@osm_city_loc))
|
81
|
+
end
|
82
|
+
|
83
|
+
def test_reverse_geo_coding
|
84
|
+
response = MockSuccess.new
|
85
|
+
response.expects(:body).returns(OSM_REVERSE_PRILEP)
|
86
|
+
prilep = Geokit::GeoLoc.new
|
87
|
+
prilep.lat, prilep.lng = "41.3527177", "21.5497808"
|
88
|
+
url = "http://nominatim.openstreetmap.org/reverse?format=json&addressdetails=1&lat=#{prilep.lat}&lon=#{prilep.lng}"
|
89
|
+
Geokit::Geocoders::OSMGeocoder.expects(:call_geocoder_service).with(url).returns(response)
|
90
|
+
res = Geokit::Geocoders::OSMGeocoder.do_reverse_geocode(prilep.ll)
|
91
|
+
|
92
|
+
#OSM does not return the exast lat lng in response
|
93
|
+
#assert_equal prilep.lat.to_s.slice(1..5), res.lat.to_s.slice(1..5)
|
94
|
+
#assert_equal prilep.lng.to_s.slice(1..5), res.lng.to_s.slice(1..5)
|
95
|
+
assert_equal "MK", res.country_code
|
96
|
+
assert_equal "osm", res.provider
|
97
|
+
|
98
|
+
assert_equal "Prilep", res.city
|
99
|
+
assert_nil res.state
|
100
|
+
|
101
|
+
assert_equal "Macedonia", res.country
|
102
|
+
assert_nil res.precision
|
103
|
+
assert_equal true, res.success
|
104
|
+
|
105
|
+
assert_equal "Marksova, Prilep, MK", res.full_address
|
106
|
+
assert_equal "Marksova", res.street_address
|
107
|
+
end
|
108
|
+
|
109
|
+
def test_reverse_geo_code
|
110
|
+
response = MockSuccess.new
|
111
|
+
response.expects(:body).returns(OSM_REVERSE_MADRID)
|
112
|
+
location = Geokit::GeoLoc.new
|
113
|
+
# Madrid
|
114
|
+
location.lat, location.lng = "40.4167413", "-3.7032498"
|
115
|
+
url = "http://nominatim.openstreetmap.org/reverse?format=json&addressdetails=1&lat=#{location.lat}&lon=#{location.lng}"
|
116
|
+
Geokit::Geocoders::OSMGeocoder.expects(:call_geocoder_service).with(url).returns(response)
|
117
|
+
res = Geokit::Geocoders::OSMGeocoder.do_reverse_geocode(location.ll)
|
118
|
+
|
119
|
+
assert_equal "ES", res.country_code
|
120
|
+
assert_equal "osm", res.provider
|
121
|
+
|
122
|
+
assert_equal "Madrid", res.city
|
123
|
+
assert_equal "Madrid", res.state
|
124
|
+
|
125
|
+
assert_equal "Spain", res.country
|
126
|
+
assert_equal true, res.success
|
127
|
+
|
128
|
+
assert_equal "Calle Del Doctor Tolosa Latour, Usera, Madrid, Madrid, 28026, ES", res.full_address
|
129
|
+
assert_equal "28026", res.zip
|
130
|
+
assert_equal "Calle Del Doctor Tolosa Latour", res.street_address
|
131
|
+
end
|
132
|
+
|
133
|
+
def test_service_unavailable
|
134
|
+
response = MockFailure.new
|
135
|
+
url = url="http://nominatim.openstreetmap.org/search?format=json&polygon=0&addressdetails=1&q=#{Geokit::Inflector.url_escape(@address)}"
|
136
|
+
Geokit::Geocoders::OSMGeocoder.expects(:call_geocoder_service).with(url).returns(response)
|
137
|
+
assert !Geokit::Geocoders::OSMGeocoder.geocode(@osm_city_loc).success
|
138
|
+
end
|
139
|
+
|
140
|
+
private
|
141
|
+
|
142
|
+
# next two methods do the assertions for both address-level and city-level lookups
|
143
|
+
def do_full_address_assertions(res)
|
144
|
+
assert_equal "California", res.state
|
145
|
+
assert_equal "San Francisco", res.city
|
146
|
+
assert_equal "37.792391,-122.394024", res.ll
|
147
|
+
assert res.is_us?
|
148
|
+
assert_equal "Spear Street 100, San Francisco, California, 94105, US", res.full_address
|
149
|
+
assert_equal "osm", res.provider
|
150
|
+
end
|
151
|
+
|
152
|
+
def do_city_assertions(res)
|
153
|
+
assert_equal "California", res.state
|
154
|
+
assert_equal "San Francisco", res.city
|
155
|
+
assert_equal "37.7340974,-122.3912596", res.ll
|
156
|
+
assert res.is_us?
|
157
|
+
assert_equal "San Francisco, California, US", res.full_address
|
158
|
+
assert_nil res.street_address
|
159
|
+
assert_equal "osm", res.provider
|
160
|
+
end
|
161
|
+
end
|
@@ -0,0 +1,101 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require File.join(File.dirname(__FILE__), 'helper')
|
3
|
+
|
4
|
+
class PolygonTest < Test::Unit::TestCase #:nodoc: all
|
5
|
+
|
6
|
+
def setup
|
7
|
+
|
8
|
+
#Create a simple square-ish polygon for easy testing
|
9
|
+
@p1 = Geokit::LatLng.new(45.3142533036254, -93.47527313511819)
|
10
|
+
@p2 = Geokit::LatLng.new(45.31232182518015, -93.34893036168069)
|
11
|
+
@p3 = Geokit::LatLng.new(45.23694281999268, -93.35167694371194)
|
12
|
+
@p4 = Geokit::LatLng.new(45.23500870841669, -93.47801971714944)
|
13
|
+
@p5 = Geokit::LatLng.new(45.3142533036254, -93.47527313511819)
|
14
|
+
|
15
|
+
@points = [@p1, @p2, @p3, @p4, @p5]
|
16
|
+
@polygon = Geokit::Polygon.new(@points)
|
17
|
+
|
18
|
+
@point_inside = Geokit::LatLng.new(45.27428243796789, -93.41648483416066)
|
19
|
+
@point_outside = Geokit::LatLng.new(45.45411010558687, -93.78151703160256)
|
20
|
+
|
21
|
+
#Create a more complex polygon with overlapping lines. Looks like a star of david
|
22
|
+
@c1 = Geokit::LatLng.new(45.48661334374487, -93.74665833078325)
|
23
|
+
@c2 = Geokit::LatLng.new(45.53521281284293, -93.32611083984375)
|
24
|
+
@c3 = Geokit::LatLng.new(45.28648197278281, -93.3673095703125)
|
25
|
+
@c4 = Geokit::LatLng.new(45.31497759107127, -93.75764465890825)
|
26
|
+
@c5 = Geokit::LatLng.new(45.36179519142128, -93.812255859375)
|
27
|
+
@c6 = Geokit::LatLng.new(45.40230699238177, -93.74908447265625)
|
28
|
+
@c7 = Geokit::LatLng.new(45.236217535866025, -93.60076904296875)
|
29
|
+
@c8 = Geokit::LatLng.new(45.39989638818863, -93.282485967502)
|
30
|
+
@c9 = Geokit::LatLng.new(45.565986795411376, -93.5760498046875)
|
31
|
+
@c10 = Geokit::LatLng.new(45.4345991655272, -93.73017883859575)
|
32
|
+
@c11 = Geokit::LatLng.new(45.48661334374487, -93.74665833078325)
|
33
|
+
|
34
|
+
@complex_points = [@c1, @c2, @c3, @c4, @c5, @c6, @c7, @c8, @c9, @c10, @c11]
|
35
|
+
@complex_polygon = Geokit::Polygon.new(@complex_points)
|
36
|
+
|
37
|
+
#Test three points that should be "inside" this complex shape
|
38
|
+
@complex_inside_one = Geokit::LatLng.new(45.52438983143154, -93.59818268101662)
|
39
|
+
@complex_inside_two = Geokit::LatLng.new(45.50321887154943, -93.37845611851662)
|
40
|
+
@complex_inside_three = Geokit::LatLng.new(45.28334174918666, -93.59543609898537)
|
41
|
+
|
42
|
+
#Test three points that should be "outside" this complex shape
|
43
|
+
@complex_outside_one = Geokit::LatLng.new(45.45314676076135, -93.563850405626)
|
44
|
+
@complex_outside_two = Geokit::LatLng.new(45.30435378077673, -93.6859130859375)
|
45
|
+
@complex_outside_three = Geokit::LatLng.new(45.538820010517036, -93.486946108751)
|
46
|
+
|
47
|
+
# Test open sided polygon aka line - for closing on initialize
|
48
|
+
@op1 = Geokit::LatLng.new(44.97402795596173, -92.7297592163086)
|
49
|
+
@op2 = Geokit::LatLng.new(44.97395509241393, -92.68448066781275)
|
50
|
+
@op3 = Geokit::LatLng.new(44.94455954512172, -92.68413734505884)
|
51
|
+
@op4 = Geokit::LatLng.new(44.94383053857761, -92.72876930306666)
|
52
|
+
|
53
|
+
@open_points = [@op1, @op2, @op3, @op4]
|
54
|
+
@open_polygon = Geokit::Polygon.new(@open_points)
|
55
|
+
|
56
|
+
end
|
57
|
+
|
58
|
+
def test_point_inside_poly
|
59
|
+
#puts "\n\nTesting point inside poly... {@polygon.contains?(@point_inside)}\n\n"
|
60
|
+
assert @polygon.contains?(@point_inside)
|
61
|
+
end
|
62
|
+
|
63
|
+
def test_point_outside_poly
|
64
|
+
#puts "\n\nTesting point outside poly... {@polygon.contains?(@point_outside)}\n\n"
|
65
|
+
assert !@polygon.contains?(@point_outside)
|
66
|
+
end
|
67
|
+
|
68
|
+
def test_points_inside_complex_poly
|
69
|
+
#puts "\n\nTesting points INSIDE complex poly..."
|
70
|
+
#puts "\tone: {@complex_polygon.contains?(@complex_inside_one)}"
|
71
|
+
#puts "\ttwo: {@complex_polygon.contains?(@complex_inside_two)}"
|
72
|
+
#puts "\tthree: {@complex_polygon.contains?(@complex_inside_three)}\n\n"
|
73
|
+
assert @complex_polygon.contains?(@complex_inside_one)
|
74
|
+
assert @complex_polygon.contains?(@complex_inside_two)
|
75
|
+
assert @complex_polygon.contains?(@complex_inside_three)
|
76
|
+
end
|
77
|
+
|
78
|
+
def test_points_outside_complex_poly
|
79
|
+
#puts "\n\nTesting points OUTSIDE complex poly..."
|
80
|
+
#puts "\tone: {@complex_polygon.contains?(@complex_outside_one)}"
|
81
|
+
#puts "\ttwo: {@complex_polygon.contains?(@complex_outside_two)}"
|
82
|
+
#puts "\tthree: {@complex_polygon.contains?(@complex_outside_three)}\n\n"
|
83
|
+
assert !@complex_polygon.contains?(@complex_outside_one)
|
84
|
+
assert !@complex_polygon.contains?(@complex_outside_two)
|
85
|
+
assert !@complex_polygon.contains?(@complex_outside_three)
|
86
|
+
end
|
87
|
+
|
88
|
+
def test_open_polygon
|
89
|
+
# A polygon can only exist of the last point is equal to the first
|
90
|
+
# Otherwise, it would just be a line of points.
|
91
|
+
|
92
|
+
#puts "\n\nTesting intialize function to close an open polygon..."
|
93
|
+
#puts "\t Does poly_x[0] (#{@open_polygon.poly_x[0]}) == poly_x[-1] (#{@open_polygon.poly_x[-1]}) ?"
|
94
|
+
#puts "\t Does poly_y[0] (#{@open_polygon.poly_y[0]}) == poly_y[-1] (#{@open_polygon.poly_y[-1]}) ?"
|
95
|
+
|
96
|
+
assert @open_polygon.poly_x[0] == @open_polygon.poly_x[-1]
|
97
|
+
assert @open_polygon.poly_y[0] == @open_polygon.poly_y[-1]
|
98
|
+
|
99
|
+
end
|
100
|
+
|
101
|
+
end
|
data/test/test_us_geocoder.rb
CHANGED
data/test/test_yahoo_geocoder.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
require File.join(File.dirname(__FILE__), '
|
1
|
+
require File.join(File.dirname(__FILE__), 'helper')
|
2
2
|
|
3
3
|
Geokit::Geocoders::yahoo = 'Yahoo'
|
4
4
|
|
@@ -11,6 +11,10 @@ class YahooGeocoderTest < BaseGeocoderTest #:nodoc: all
|
|
11
11
|
{"ResultSet":{"version":"1.0","Error":0,"ErrorMessage":"No error","Locale":"us_US","Quality":40,"Found":1,"Results":[{"quality":40,"latitude":"37.7742","longitude":"-122.417068","offsetlat":"37.7742","offsetlon":"-122.417068","radius":10700,"name":"","line1":"","line2":"San Francisco, CA","line3":"","line4":"United States","house":"","street":"","xstreet":"","unittype":"","unit":"","postal":"","neighborhood":"","city":"San Francisco","county":"San Francisco County","state":"California","country":"United States","countrycode":"US","statecode":"CA","countycode":"","uzip":"94102","hash":"","woeid":2487956,"woetype":7}]}}
|
12
12
|
EOF
|
13
13
|
|
14
|
+
YAHOO_NO_RESULTS=<<-EOF.strip
|
15
|
+
{"ResultSet":{"version":"1.0","Error":0,"ErrorMessage":"No error","Locale":"us_US","Quality":10,"Found":0}}
|
16
|
+
EOF
|
17
|
+
|
14
18
|
def setup
|
15
19
|
super
|
16
20
|
@yahoo_full_hash = {:street_address=>"100 Spear St", :city=>"San Francisco", :state=>"CA", :zip=>"94105-1522", :country_code=>"US"}
|
@@ -70,6 +74,19 @@ class YahooGeocoderTest < BaseGeocoderTest #:nodoc: all
|
|
70
74
|
do_city_assertions(Geokit::Geocoders::YahooGeocoder.geocode(@yahoo_city_loc))
|
71
75
|
end
|
72
76
|
|
77
|
+
def test_no_results
|
78
|
+
no_results_address = "ZZ, ZZ, ZZ"
|
79
|
+
no_results_full_hash = {:street_address=>"ZZ", :city=>"ZZ", :state=>"ZZ"}
|
80
|
+
no_results_full_loc = Geokit::GeoLoc.new(no_results_full_hash)
|
81
|
+
|
82
|
+
response = MockSuccess.new
|
83
|
+
response.expects(:body).returns(YAHOO_NO_RESULTS)
|
84
|
+
url = "http://where.yahooapis.com/geocode?flags=J&appid=Yahoo&q=#{Geokit::Inflector.url_escape(no_results_address)}"
|
85
|
+
Geokit::Geocoders::YahooGeocoder.expects(:call_geocoder_service).with(url).returns(response)
|
86
|
+
result = Geokit::Geocoders::YahooGeocoder.geocode(no_results_address)
|
87
|
+
assert_equal ",", result.ll
|
88
|
+
end
|
89
|
+
|
73
90
|
def test_service_unavailable
|
74
91
|
response = MockFailure.new
|
75
92
|
url = "http://where.yahooapis.com/geocode?flags=J&appid=Yahoo&q=#{Geokit::Inflector.url_escape(@address)}"
|
metadata
CHANGED
@@ -1,128 +1,209 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: geokit
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
prerelease:
|
6
|
-
segments:
|
7
|
-
- 1
|
8
|
-
- 6
|
9
|
-
- 5
|
10
|
-
version: 1.6.5
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.6.6
|
11
5
|
platform: ruby
|
12
|
-
authors:
|
13
|
-
- James Cox, Andre Lewis & Bill Eisenhauer
|
6
|
+
authors:
|
7
|
+
- Michael Noack, James Cox, Andre Lewis & Bill Eisenhauer
|
14
8
|
autorequire:
|
15
9
|
bindir: bin
|
16
10
|
cert_chain: []
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
- !ruby/object:Gem::Dependency
|
11
|
+
date: 2013-09-18 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
21
14
|
name: multi_json
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
- !ruby/object:Gem::Version
|
28
|
-
hash: 3
|
29
|
-
segments:
|
30
|
-
- 0
|
31
|
-
version: "0"
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ! '>='
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 1.3.2
|
32
20
|
type: :runtime
|
33
|
-
|
34
|
-
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ! '>='
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 1.3.2
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: bundler
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ! '>'
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '1.0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ! '>'
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '1.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: simplecov
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ! '>='
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ! '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: simplecov-rcov
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ! '>='
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
35
70
|
name: rake
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ! '>='
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ! '>='
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: mocha
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ! '>='
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
36
91
|
prerelease: false
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ! '>='
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: coveralls
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ! '>='
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
46
104
|
type: :development
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
-
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ! '>='
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
description: Geokit provides geocoding and distance calculation in an easy-to-use
|
112
|
+
API
|
113
|
+
email:
|
114
|
+
- michael+geokit@noack.com.au
|
51
115
|
executables: []
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
extra_rdoc_files:
|
116
|
+
extensions:
|
117
|
+
- ext/mkrf_conf.rb
|
118
|
+
extra_rdoc_files:
|
56
119
|
- README.markdown
|
57
|
-
files:
|
120
|
+
files:
|
121
|
+
- .gitignore
|
122
|
+
- .travis.yml
|
123
|
+
- CHANGELOG.md
|
124
|
+
- Gemfile
|
125
|
+
- LICENSE
|
126
|
+
- Manifest.txt
|
58
127
|
- README.markdown
|
59
128
|
- Rakefile
|
60
|
-
-
|
129
|
+
- ext/mkrf_conf.rb
|
130
|
+
- geokit.gemspec
|
61
131
|
- lib/geokit.rb
|
132
|
+
- lib/geokit/geocoders.rb
|
133
|
+
- lib/geokit/inflectors.rb
|
62
134
|
- lib/geokit/mappable.rb
|
135
|
+
- lib/geokit/multi_geocoder.rb
|
136
|
+
- lib/geokit/services/ca_geocoder.rb
|
137
|
+
- lib/geokit/services/fcc.rb
|
138
|
+
- lib/geokit/services/geo_plugin.rb
|
139
|
+
- lib/geokit/services/geonames.rb
|
140
|
+
- lib/geokit/services/google.rb
|
141
|
+
- lib/geokit/services/google3.rb
|
142
|
+
- lib/geokit/services/ip.rb
|
143
|
+
- lib/geokit/services/openstreetmap.rb
|
144
|
+
- lib/geokit/services/us_geocoder.rb
|
145
|
+
- lib/geokit/services/yahoo.rb
|
146
|
+
- lib/geokit/version.rb
|
147
|
+
- test/helper.rb
|
63
148
|
- test/test_base_geocoder.rb
|
64
149
|
- test/test_bounds.rb
|
65
150
|
- test/test_ca_geocoder.rb
|
66
151
|
- test/test_geoloc.rb
|
67
|
-
- test/test_google_geocoder3.rb
|
68
|
-
- test/test_google_geocoder.rb
|
69
|
-
- test/test_latlng.rb
|
70
|
-
- test/test_multi_geocoder.rb
|
71
|
-
- test/test_us_geocoder.rb
|
72
|
-
- test/test_yahoo_geocoder.rb
|
73
152
|
- test/test_geoplugin_geocoder.rb
|
153
|
+
- test/test_google_geocoder.rb
|
154
|
+
- test/test_google_geocoder3.rb
|
74
155
|
- test/test_google_reverse_geocoder.rb
|
75
156
|
- test/test_inflector.rb
|
76
157
|
- test/test_ipgeocoder.rb
|
158
|
+
- test/test_latlng.rb
|
159
|
+
- test/test_multi_geocoder.rb
|
77
160
|
- test/test_multi_ip_geocoder.rb
|
78
|
-
|
79
|
-
|
80
|
-
|
161
|
+
- test/test_openstreetmap_geocoder.rb
|
162
|
+
- test/test_polygon_contains.rb
|
163
|
+
- test/test_us_geocoder.rb
|
164
|
+
- test/test_yahoo_geocoder.rb
|
165
|
+
homepage: http://github.com/geokit/geokit
|
166
|
+
licenses:
|
167
|
+
- MIT
|
168
|
+
metadata: {}
|
81
169
|
post_install_message:
|
82
|
-
rdoc_options:
|
170
|
+
rdoc_options:
|
83
171
|
- --main
|
84
172
|
- README.markdown
|
85
|
-
require_paths:
|
173
|
+
require_paths:
|
86
174
|
- lib
|
87
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
none: false
|
98
|
-
requirements:
|
99
|
-
- - ">="
|
100
|
-
- !ruby/object:Gem::Version
|
101
|
-
hash: 3
|
102
|
-
segments:
|
103
|
-
- 0
|
104
|
-
version: "0"
|
175
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
176
|
+
requirements:
|
177
|
+
- - ! '>='
|
178
|
+
- !ruby/object:Gem::Version
|
179
|
+
version: '0'
|
180
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
181
|
+
requirements:
|
182
|
+
- - ! '>='
|
183
|
+
- !ruby/object:Gem::Version
|
184
|
+
version: '0'
|
105
185
|
requirements: []
|
106
|
-
|
107
|
-
|
108
|
-
rubygems_version: 1.8.15
|
186
|
+
rubyforge_project:
|
187
|
+
rubygems_version: 2.0.3
|
109
188
|
signing_key:
|
110
|
-
specification_version:
|
111
|
-
summary:
|
112
|
-
test_files:
|
189
|
+
specification_version: 4
|
190
|
+
summary: ! 'Geokit: encoding and distance calculation gem'
|
191
|
+
test_files:
|
192
|
+
- test/helper.rb
|
113
193
|
- test/test_base_geocoder.rb
|
114
194
|
- test/test_bounds.rb
|
115
195
|
- test/test_ca_geocoder.rb
|
116
196
|
- test/test_geoloc.rb
|
117
197
|
- test/test_geoplugin_geocoder.rb
|
118
|
-
- test/test_google_geocoder3.rb
|
119
198
|
- test/test_google_geocoder.rb
|
199
|
+
- test/test_google_geocoder3.rb
|
120
200
|
- test/test_google_reverse_geocoder.rb
|
121
201
|
- test/test_inflector.rb
|
122
202
|
- test/test_ipgeocoder.rb
|
123
203
|
- test/test_latlng.rb
|
124
204
|
- test/test_multi_geocoder.rb
|
125
205
|
- test/test_multi_ip_geocoder.rb
|
206
|
+
- test/test_openstreetmap_geocoder.rb
|
207
|
+
- test/test_polygon_contains.rb
|
126
208
|
- test/test_us_geocoder.rb
|
127
209
|
- test/test_yahoo_geocoder.rb
|
128
|
-
has_rdoc: true
|