geokit 1.6.5 → 1.6.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|