geocoder 1.1.9 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of geocoder might be problematic. Click here for more details.

Files changed (114) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/.travis.yml +9 -5
  4. data/CHANGELOG.md +19 -0
  5. data/README.md +175 -10
  6. data/Rakefile +1 -1
  7. data/gemfiles/Gemfile.mongoid-2.4.x +1 -0
  8. data/lib/generators/geocoder/maxmind/geolite_city_generator.rb +28 -0
  9. data/lib/generators/geocoder/maxmind/geolite_country_generator.rb +28 -0
  10. data/lib/generators/geocoder/maxmind/templates/migration/geolite_city.rb +27 -0
  11. data/lib/generators/geocoder/maxmind/templates/migration/geolite_country.rb +17 -0
  12. data/lib/geocoder.rb +4 -12
  13. data/lib/geocoder/cache.rb +3 -2
  14. data/lib/geocoder/calculations.rb +39 -0
  15. data/lib/geocoder/configuration.rb +1 -7
  16. data/lib/geocoder/ip_address.rb +12 -0
  17. data/lib/geocoder/lookup.rb +10 -1
  18. data/lib/geocoder/lookups/baidu.rb +7 -6
  19. data/lib/geocoder/lookups/baidu_ip.rb +54 -0
  20. data/lib/geocoder/lookups/base.rb +37 -9
  21. data/lib/geocoder/lookups/bing.rb +10 -5
  22. data/lib/geocoder/lookups/cloudmade.rb +35 -0
  23. data/lib/geocoder/lookups/freegeoip.rb +5 -1
  24. data/lib/geocoder/lookups/geocodio.rb +42 -0
  25. data/lib/geocoder/lookups/google_premier.rb +1 -1
  26. data/lib/geocoder/lookups/here.rb +62 -0
  27. data/lib/geocoder/lookups/mapquest.rb +2 -1
  28. data/lib/geocoder/lookups/maxmind_local.rb +58 -0
  29. data/lib/geocoder/lookups/nominatim.rb +8 -0
  30. data/lib/geocoder/lookups/smarty_streets.rb +45 -0
  31. data/lib/geocoder/lookups/yahoo.rb +1 -1
  32. data/lib/geocoder/models/active_record.rb +5 -3
  33. data/lib/geocoder/models/base.rb +1 -4
  34. data/lib/geocoder/models/mongo_base.rb +4 -2
  35. data/lib/geocoder/query.rb +4 -4
  36. data/lib/geocoder/railtie.rb +1 -1
  37. data/lib/geocoder/request.rb +10 -8
  38. data/lib/geocoder/results/baidu_ip.rb +62 -0
  39. data/lib/geocoder/results/cloudmade.rb +39 -0
  40. data/lib/geocoder/results/geocodio.rb +66 -0
  41. data/lib/geocoder/results/here.rb +62 -0
  42. data/lib/geocoder/results/maxmind_local.rb +49 -0
  43. data/lib/geocoder/results/smarty_streets.rb +106 -0
  44. data/lib/geocoder/results/test.rb +20 -3
  45. data/lib/geocoder/results/yandex.rb +7 -3
  46. data/lib/geocoder/sql.rb +16 -15
  47. data/lib/geocoder/stores/active_record.rb +6 -2
  48. data/lib/geocoder/stores/base.rb +8 -1
  49. data/lib/geocoder/version.rb +1 -1
  50. data/lib/maxmind_database.rb +109 -0
  51. data/lib/oauth_util.rb +1 -1
  52. data/lib/tasks/geocoder.rake +3 -1
  53. data/lib/tasks/maxmind.rake +73 -0
  54. data/test/fixtures/baidu_ip_202_198_16_3 +19 -0
  55. data/test/fixtures/baidu_ip_invalid_key +1 -0
  56. data/test/fixtures/baidu_ip_no_results +1 -0
  57. data/test/fixtures/cloudmade_invalid_key +1 -0
  58. data/test/fixtures/cloudmade_madison_square_garden +1 -0
  59. data/test/fixtures/cloudmade_no_results +1 -0
  60. data/test/fixtures/geocodio_1101_pennsylvania_ave +1 -0
  61. data/test/fixtures/geocodio_bad_api_key +3 -0
  62. data/test/fixtures/geocodio_invalid +4 -0
  63. data/test/fixtures/geocodio_no_results +1 -0
  64. data/test/fixtures/geocodio_over_query_limit +4 -0
  65. data/test/fixtures/here_madison_square_garden +72 -0
  66. data/test/fixtures/here_no_results +8 -0
  67. data/test/fixtures/nominatim_over_limit +1 -0
  68. data/test/fixtures/smarty_streets_11211 +1 -0
  69. data/test/fixtures/smarty_streets_madison_square_garden +47 -0
  70. data/test/fixtures/smarty_streets_no_results +1 -0
  71. data/test/fixtures/yandex_canada_rue_dupuis_14 +446 -0
  72. data/test/fixtures/yandex_new_york +1 -0
  73. data/test/integration/http_client_test.rb +25 -0
  74. data/test/mongoid_test_helper.rb +2 -2
  75. data/test/test_helper.rb +98 -30
  76. data/test/{active_record_test.rb → unit/active_record_test.rb} +4 -3
  77. data/test/{cache_test.rb → unit/cache_test.rb} +3 -1
  78. data/test/{calculations_test.rb → unit/calculations_test.rb} +22 -13
  79. data/test/{configuration_test.rb → unit/configuration_test.rb} +4 -27
  80. data/test/{error_handling_test.rb → unit/error_handling_test.rb} +10 -9
  81. data/test/{geocoder_test.rb → unit/geocoder_test.rb} +26 -7
  82. data/test/{https_test.rb → unit/https_test.rb} +4 -3
  83. data/test/unit/ip_address_test.rb +24 -0
  84. data/test/{lookup_test.rb → unit/lookup_test.rb} +33 -20
  85. data/test/unit/lookups/bing_test.rb +68 -0
  86. data/test/unit/lookups/dstk_test.rb +26 -0
  87. data/test/unit/lookups/esri_test.rb +48 -0
  88. data/test/unit/lookups/freegeoip_test.rb +27 -0
  89. data/test/unit/lookups/geocoder_ca_test.rb +17 -0
  90. data/test/unit/lookups/geocodio_test.rb +55 -0
  91. data/test/unit/lookups/google_premier_test.rb +22 -0
  92. data/test/unit/lookups/google_test.rb +84 -0
  93. data/test/unit/lookups/mapquest_test.rb +60 -0
  94. data/test/unit/lookups/maxmind_local_test.rb +28 -0
  95. data/test/unit/lookups/maxmind_test.rb +63 -0
  96. data/test/unit/lookups/nominatim_test.rb +31 -0
  97. data/test/unit/lookups/smarty_streets_test.rb +71 -0
  98. data/test/unit/lookups/yahoo_test.rb +35 -0
  99. data/test/{method_aliases_test.rb → unit/method_aliases_test.rb} +5 -4
  100. data/test/unit/model_test.rb +38 -0
  101. data/test/{mongoid_test.rb → unit/mongoid_test.rb} +10 -9
  102. data/test/unit/near_test.rb +87 -0
  103. data/test/{oauth_util_test.rb → unit/oauth_util_test.rb} +3 -2
  104. data/test/{proxy_test.rb → unit/proxy_test.rb} +2 -1
  105. data/test/{query_test.rb → unit/query_test.rb} +7 -8
  106. data/test/unit/rake_task_test.rb +21 -0
  107. data/test/{request_test.rb → unit/request_test.rb} +8 -2
  108. data/test/{result_test.rb → unit/result_test.rb} +29 -1
  109. data/test/{test_mode_test.rb → unit/test_mode_test.rb} +12 -1
  110. metadata +80 -27
  111. data/test/custom_block_test.rb +0 -32
  112. data/test/integration/smoke_test.rb +0 -26
  113. data/test/near_test.rb +0 -61
  114. data/test/services_test.rb +0 -393
@@ -49,7 +49,7 @@ class OauthUtil
49
49
  key = percent_encode( @consumer_secret ) + '&' + percent_encode( @token_secret )
50
50
 
51
51
  # ref: http://blog.nathanielbibler.com/post/63031273/openssl-hmac-vs-ruby-hmac-benchmarks
52
- digest = OpenSSL::Digest::Digest.new( 'sha1' )
52
+ digest = OpenSSL::Digest.new( 'sha1' )
53
53
  hmac = OpenSSL::HMAC.digest( digest, key, @base_str )
54
54
 
55
55
  # ref http://groups.google.com/group/oauth-ruby/browse_thread/thread/9110ed8c8f3cae81
@@ -3,10 +3,12 @@ namespace :geocode do
3
3
  task :all => :environment do
4
4
  class_name = ENV['CLASS'] || ENV['class']
5
5
  sleep_timer = ENV['SLEEP'] || ENV['sleep']
6
+ batch = ENV['BATCH'] || ENV['batch']
6
7
  raise "Please specify a CLASS (model)" unless class_name
7
8
  klass = class_from_string(class_name)
9
+ batch = batch.to_i unless batch.nil?
8
10
 
9
- klass.not_geocoded.each do |obj|
11
+ klass.not_geocoded.find_each(batch_size: batch) do |obj|
10
12
  obj.geocode; obj.save
11
13
  sleep(sleep_timer.to_f) unless sleep_timer.nil?
12
14
  end
@@ -0,0 +1,73 @@
1
+ require 'maxmind_database'
2
+
3
+ namespace :geocoder do
4
+ namespace :maxmind do
5
+ namespace :geolite do
6
+
7
+ desc "Download and load/refresh MaxMind GeoLite City data"
8
+ task load: [:download, :extract, :insert]
9
+
10
+ desc "Download MaxMind GeoLite City data"
11
+ task :download do
12
+ p = MaxmindTask.check_for_package!
13
+ MaxmindTask.download!(p, dir: ENV['DIR'] || "tmp/")
14
+ end
15
+
16
+ desc "Extract (unzip) MaxMind GeoLite City data"
17
+ task :extract do
18
+ p = MaxmindTask.check_for_package!
19
+ MaxmindTask.extract!(p, dir: ENV['DIR'] || "tmp/")
20
+ end
21
+
22
+ desc "Load/refresh MaxMind GeoLite City data"
23
+ task insert: [:environment] do
24
+ p = MaxmindTask.check_for_package!
25
+ MaxmindTask.insert!(p, dir: ENV['DIR'] || "tmp/")
26
+ end
27
+ end
28
+ end
29
+ end
30
+
31
+ module MaxmindTask
32
+ extend self
33
+
34
+ def check_for_package!
35
+ if %w[city country].include?(p = ENV['PACKAGE'])
36
+ return p
37
+ else
38
+ puts "Please specify PACKAGE=city or PACKAGE=country"
39
+ exit
40
+ end
41
+ end
42
+
43
+ def download!(package, options = {})
44
+ p = "geolite_#{package}_csv".intern
45
+ Geocoder::MaxmindDatabase.download(p, options[:dir])
46
+ end
47
+
48
+ def extract!(package, options = {})
49
+ begin
50
+ require 'zip'
51
+ rescue LoadError
52
+ puts "Please install gem: rubyzip (>= 1.0.0)"
53
+ exit
54
+ end
55
+ require 'fileutils'
56
+ p = "geolite_#{package}_csv".intern
57
+ archive_filename = Geocoder::MaxmindDatabase.archive_filename(p)
58
+ Zip::File.open(File.join(options[:dir], archive_filename)).each do |entry|
59
+ filepath = File.join(options[:dir], entry.name)
60
+ if File.exist? filepath
61
+ warn "File already exists (#{entry.name}), skipping"
62
+ else
63
+ FileUtils.mkdir_p(File.dirname(filepath))
64
+ entry.extract(filepath)
65
+ end
66
+ end
67
+ end
68
+
69
+ def insert!(package, options = {})
70
+ p = "geolite_#{package}_csv".intern
71
+ Geocoder::MaxmindDatabase.insert(p, options[:dir])
72
+ end
73
+ end
@@ -0,0 +1,19 @@
1
+ {
2
+ "address": "CN|北京|北京|None|CHINANET|1|None",
3
+ "content": {
4
+ "address": "北京市",
5
+ "address_detail": {
6
+ "city": "北京市",
7
+ "city_code": 131,
8
+ "district": "",
9
+ "province": "北京市",
10
+ "street": "",
11
+ "street_number": ""
12
+ },
13
+ "point": {
14
+ "x": "116.39564504",
15
+ "y": "39.92998578"
16
+ }
17
+ },
18
+ "status": 0
19
+ }
@@ -0,0 +1 @@
1
+ {"status":5,"uid":null,"sk":null,"logformat":null}
@@ -0,0 +1 @@
1
+ {"status":0, "content":{}}
@@ -0,0 +1 @@
1
+ Forbidden request
@@ -0,0 +1 @@
1
+ {"found": 2, "bounds": [[40.74983, -73.99433], [40.75116, -73.99266]], "features": [{"id": 32891803,"centroid": {"type":"POINT","coordinates":[40.75111, -73.99345]},"bounds": [[40.74983, -73.99433], [40.75116, -73.99266]],"properties": {"osm_element": "way", "sport": "hockey;basketball;lacrosse", "name": "Madison Square Garden", "leisure": "stadium", "osm_id": "24801588"},"location": {"county": "New York", "country": "United States of America", "postcode": "10119", "road": "West 31st Street", "city": "New York"},"type": "Feature"},{"id": 12977552,"centroid": {"type":"POINT","coordinates":[40.75066, -73.99347]},"bounds": [[40.75066, -73.99347], [40.75066, -73.99347]],"properties": {"building": "yes", "osm_element": "node", "name": "Madison Square Garden Center", "addr:state": "NY", "osm_id": "368045579"},"location": {"county": "New York", "country": "United States of America", "postcode": "10119", "road": "West 33rd Street", "city": "New York"},"type": "Feature"}], "type": "FeatureCollection", "crs": {"type": "EPSG", "properties": {"code": 4326, "coordinate_order": [0, 1]}}}
@@ -0,0 +1 @@
1
+ {"input":{"address_components":{"number":"1101","street":"Pennsylvania","suffix":"Ave","postdirectional":"NW","city":"Washington","state":"DC"},"formatted_address":"1101 Pennsylvania Ave NW, Washington DC"},"results":[{"address_components":{"number":"1101","street":"Pennsylvania","suffix":"Ave","postdirectional":"NW","city":"Washington","state":"DC","zip":"20004"},"formatted_address":"1101 Pennsylvania Ave NW, Washington DC, 20004","location":{"lat":38.895019,"lng":-77.028095},"accuracy":1},{"address_components":{"number":"1101","street":"Pennsylvania","suffix":"Ave","postdirectional":"NW","city":"Washington","state":"DC","zip":"20004"},"formatted_address":"1101 Pennsylvania Ave NW, Washington DC, 20004","location":{"lat":38.895016122449,"lng":-77.028084377551},"accuracy":0.8}]}
@@ -0,0 +1,3 @@
1
+ {
2
+ "error": "Invalid API key"
3
+ }
@@ -0,0 +1,4 @@
1
+ {
2
+ "error": "Could not geocode address, zip code, city or city/state are required"
3
+ }
4
+
@@ -0,0 +1 @@
1
+ {"input":{"address_components":{"number":"1101","street":"Pennsylvania","suffix":"Ave","postdirectional":"NW","city":"Washington","state":"DC"},"formatted_address":"1101 Pennsylvania Ave NW, Washington DC"},"results":[]}
@@ -0,0 +1,4 @@
1
+ {
2
+ "error": "You have reached your daily maximum, please add a payment method for continued use. You can configure billing at https://dash.geocod.io"
3
+ }
4
+
@@ -0,0 +1,72 @@
1
+ {
2
+ "Response": {
3
+ "MetaInfo": {
4
+ "Timestamp": "2013-02-08T16:26:39.382+0000"
5
+ },
6
+ "View": [
7
+ {
8
+ "_type": "SearchResultsViewType",
9
+ "ViewId": 0,
10
+ "Result": [
11
+ {
12
+ "Relevance": 1.0,
13
+ "MatchLevel": "houseNumber",
14
+ "MatchQuality": {
15
+ "State": 1.0,
16
+ "City": 1.0,
17
+ "Street": [
18
+ 1.0
19
+ ],
20
+ "HouseNumber": 1.0
21
+ },
22
+ "MatchType": "pointAddress",
23
+ "Location": {
24
+ "LocationId": "NT_ArsGdYbpo6dqjPQel9gTID_4",
25
+ "LocationType": "point",
26
+ "DisplayPosition": {
27
+ "Latitude": 40.7504692,
28
+ "Longitude": -73.9933777
29
+ },
30
+ "NavigationPosition": [
31
+ {
32
+ "Latitude": 40.7500305,
33
+ "Longitude": -73.9942398
34
+ }
35
+ ],
36
+ "MapView": {
37
+ "TopLeft": {
38
+ "Latitude": 40.7515934,
39
+ "Longitude": -73.9948616
40
+ },
41
+ "BottomRight": {
42
+ "Latitude": 40.7493451,
43
+ "Longitude": -73.9918938
44
+ }
45
+ },
46
+ "Address": {
47
+ "Label": "4 Penn Plz, New York, NY 10001, United States",
48
+ "Country": "USA",
49
+ "State": "NY",
50
+ "County": "New York",
51
+ "City": "New York",
52
+ "Street": "Penn Plz",
53
+ "HouseNumber": "4",
54
+ "PostalCode": "10001",
55
+ "AdditionalData": [
56
+ {
57
+ "value": "United States",
58
+ "key": "CountryName"
59
+ },
60
+ {
61
+ "value": "New York",
62
+ "key": "StateName"
63
+ }
64
+ ]
65
+ }
66
+ }
67
+ }
68
+ ]
69
+ }
70
+ ]
71
+ }
72
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "Response": {
3
+ "MetaInfo": {
4
+ "Timestamp": "2013-02-08T16:41:16.723+0000"
5
+ },
6
+ "View": []
7
+ }
8
+ }
@@ -0,0 +1 @@
1
+ <html>\n<head>\n<title>Bandwidth limit exceeded</title>\n</head>\n<body>\n<h1>Bandwidth limit exceeded</h1>\n\n<p>You have been temporarily blocked because you have been overusing OSM's geocoding service or because you have not provided sufficient identification of your application. This block will be automatically lifted after a while. Please take the time and adapt your scripts to reduce the number of requests and make sure that you send a valid UserAgent or Referer.</p>\n\n<p>For more information, consult the <a href=\"http://wiki.openstreetmap.org/wiki/Nominatim_usage_policy\">usage policy</a> for the OSM Nominatim server.\n</body>\n</head>\n
@@ -0,0 +1 @@
1
+ [{"input_index":0,"city_states":[{"city":"Brooklyn","state_abbreviation":"NY","state":"New York"}],"zipcodes":[{"zipcode":"11211","zipcode_type":"S","county_fips":"36047","county_name":"Kings","latitude":40.71184,"longitude":-73.95288}]}]
@@ -0,0 +1,47 @@
1
+ [
2
+ {
3
+ "input_index": 0,
4
+ "candidate_index": 0,
5
+ "addressee": "Madison Sq Garden",
6
+ "delivery_line_1": "2 Penn Plz Fl 15",
7
+ "last_line": "New York NY 10121-1703",
8
+ "delivery_point_barcode": "101211703022",
9
+ "components": {
10
+ "primary_number": "2",
11
+ "street_name": "Penn",
12
+ "street_suffix": "Plz",
13
+ "secondary_number": "15",
14
+ "secondary_designator": "Fl",
15
+ "city_name": "New York",
16
+ "state_abbreviation": "NY",
17
+ "zipcode": "10121",
18
+ "plus4_code": "1703",
19
+ "delivery_point": "02",
20
+ "delivery_point_check_digit": "2"
21
+ },
22
+ "metadata": {
23
+ "record_type": "F",
24
+ "zip_type": "Standard",
25
+ "county_fips": "36061",
26
+ "county_name": "New York",
27
+ "carrier_route": "C038",
28
+ "congressional_district": "12",
29
+ "rdi": "Commercial",
30
+ "elot_sequence": "0035",
31
+ "elot_sort": "A",
32
+ "latitude": 40.74959,
33
+ "longitude": -73.99251,
34
+ "precision": "Zip7",
35
+ "time_zone": "Eastern",
36
+ "utc_offset": -5.0,
37
+ "dst": true
38
+ },
39
+ "analysis": {
40
+ "dpv_match_code": "Y",
41
+ "dpv_footnotes": "AABB",
42
+ "dpv_cmra": "N",
43
+ "dpv_vacant": "N",
44
+ "active": "Y"
45
+ }
46
+ }
47
+ ]
@@ -0,0 +1,446 @@
1
+ {
2
+ "response":{
3
+ "Attribution":"",
4
+ "GeoObjectCollection":{
5
+ "metaDataProperty":{
6
+ "GeocoderResponseMetaData":{
7
+ "request":"canada rue dupuis 14",
8
+ "found":"52",
9
+ "results":"10"
10
+ }
11
+ },
12
+ "featureMember":[
13
+ {
14
+ "GeoObject":{
15
+ "metaDataProperty":{
16
+ "GeocoderMetaData":{
17
+ "kind":"house",
18
+ "text":"Canada, Quebec, Beauharnois-Salaberry, Beauharnois, Rue Dupuis, 14",
19
+ "precision":"exact",
20
+ "AddressDetails":{
21
+ "Country":{
22
+ "AddressLine":"Quebec, Beauharnois-Salaberry, Beauharnois, Rue Dupuis, 14",
23
+ "CountryNameCode":"CA",
24
+ "CountryName":"Canada",
25
+ "AdministrativeArea":{
26
+ "AdministrativeAreaName":"Quebec",
27
+ "SubAdministrativeArea":{
28
+ "SubAdministrativeAreaName":"Beauharnois-Salaberry",
29
+ "Locality":{
30
+ "LocalityName":"Beauharnois",
31
+ "Thoroughfare":{
32
+ "ThoroughfareName":"Rue Dupuis",
33
+ "Premise":{
34
+ "PremiseNumber":"14"
35
+ }
36
+ }
37
+ }
38
+ }
39
+ }
40
+ }
41
+ }
42
+ }
43
+ },
44
+ "description":"Beauharnois, Beauharnois-Salaberry, Quebec, Canada",
45
+ "name":"Rue Dupuis, 14",
46
+ "boundedBy":{
47
+ "Envelope":{
48
+ "lowerCorner":"-73.880377 45.306461",
49
+ "upperCorner":"-73.876281 45.309351"
50
+ }
51
+ },
52
+ "Point":{
53
+ "pos":"-73.878329 45.307906"
54
+ }
55
+ }
56
+ },
57
+ {
58
+ "GeoObject":{
59
+ "metaDataProperty":{
60
+ "GeocoderMetaData":{
61
+ "kind":"house",
62
+ "text":"Canada, Quebec, Roussillon, St-Philippe, Rue Dupuis, 14",
63
+ "precision":"exact",
64
+ "AddressDetails":{
65
+ "Country":{
66
+ "AddressLine":"Quebec, Roussillon, St-Philippe, Rue Dupuis, 14",
67
+ "CountryNameCode":"CA",
68
+ "CountryName":"Canada",
69
+ "AdministrativeArea":{
70
+ "AdministrativeAreaName":"Quebec",
71
+ "SubAdministrativeArea":{
72
+ "SubAdministrativeAreaName":"Roussillon",
73
+ "Locality":{
74
+ "LocalityName":"St-Philippe",
75
+ "Thoroughfare":{
76
+ "ThoroughfareName":"Rue Dupuis",
77
+ "Premise":{
78
+ "PremiseNumber":"14"
79
+ }
80
+ }
81
+ }
82
+ }
83
+ }
84
+ }
85
+ }
86
+ }
87
+ },
88
+ "description":"St-Philippe, Roussillon, Quebec, Canada",
89
+ "name":"Rue Dupuis, 14",
90
+ "boundedBy":{
91
+ "Envelope":{
92
+ "lowerCorner":"-73.491263 45.371702",
93
+ "upperCorner":"-73.487167 45.374589"
94
+ }
95
+ },
96
+ "Point":{
97
+ "pos":"-73.489215 45.373146"
98
+ }
99
+ }
100
+ },
101
+ {
102
+ "GeoObject":{
103
+ "metaDataProperty":{
104
+ "GeocoderMetaData":{
105
+ "kind":"house",
106
+ "text":"Canada, Quebec, Témiscamingue, Notre-Dame-du-Nord, Rue Dupuis, 14",
107
+ "precision":"exact",
108
+ "AddressDetails":{
109
+ "Country":{
110
+ "AddressLine":"Quebec, Témiscamingue, Notre-Dame-du-Nord, Rue Dupuis, 14",
111
+ "CountryNameCode":"CA",
112
+ "CountryName":"Canada",
113
+ "AdministrativeArea":{
114
+ "AdministrativeAreaName":"Quebec",
115
+ "SubAdministrativeArea":{
116
+ "SubAdministrativeAreaName":"Témiscamingue",
117
+ "Locality":{
118
+ "LocalityName":"Notre-Dame-du-Nord",
119
+ "Thoroughfare":{
120
+ "ThoroughfareName":"Rue Dupuis",
121
+ "Premise":{
122
+ "PremiseNumber":"14"
123
+ }
124
+ }
125
+ }
126
+ }
127
+ }
128
+ }
129
+ }
130
+ }
131
+ },
132
+ "description":"Notre-Dame-du-Nord, Témiscamingue, Quebec, Canada",
133
+ "name":"Rue Dupuis, 14",
134
+ "boundedBy":{
135
+ "Envelope":{
136
+ "lowerCorner":"-79.484724 47.596109",
137
+ "upperCorner":"-79.480628 47.598879"
138
+ }
139
+ },
140
+ "Point":{
141
+ "pos":"-79.482676 47.597494"
142
+ }
143
+ }
144
+ },
145
+ {
146
+ "GeoObject":{
147
+ "metaDataProperty":{
148
+ "GeocoderMetaData":{
149
+ "kind":"house",
150
+ "text":"Canada, Quebec, Montcalm, St-Jacques, Rue Dupuis, 14",
151
+ "precision":"exact",
152
+ "AddressDetails":{
153
+ "Country":{
154
+ "AddressLine":"Quebec, Montcalm, St-Jacques, Rue Dupuis, 14",
155
+ "CountryNameCode":"CA",
156
+ "CountryName":"Canada",
157
+ "AdministrativeArea":{
158
+ "AdministrativeAreaName":"Quebec",
159
+ "SubAdministrativeArea":{
160
+ "SubAdministrativeAreaName":"Montcalm",
161
+ "Locality":{
162
+ "LocalityName":"St-Jacques",
163
+ "Thoroughfare":{
164
+ "ThoroughfareName":"Rue Dupuis",
165
+ "Premise":{
166
+ "PremiseNumber":"14"
167
+ }
168
+ }
169
+ }
170
+ }
171
+ }
172
+ }
173
+ }
174
+ }
175
+ },
176
+ "description":"St-Jacques, Montcalm, Quebec, Canada",
177
+ "name":"Rue Dupuis, 14",
178
+ "boundedBy":{
179
+ "Envelope":{
180
+ "lowerCorner":"-73.573136 45.945209",
181
+ "upperCorner":"-73.569039 45.948066"
182
+ }
183
+ },
184
+ "Point":{
185
+ "pos":"-73.571088 45.946637"
186
+ }
187
+ }
188
+ },
189
+ {
190
+ "GeoObject":{
191
+ "metaDataProperty":{
192
+ "GeocoderMetaData":{
193
+ "kind":"street",
194
+ "text":"Canada, Quebec, Le Haut-Richelieu, St-Jean-sur-Richelieu, St-Luc, Rue Dupuis",
195
+ "precision":"street",
196
+ "AddressDetails":{
197
+ "Country":{
198
+ "AddressLine":"Quebec, Le Haut-Richelieu, St-Jean-sur-Richelieu, St-Luc, Rue Dupuis",
199
+ "CountryNameCode":"CA",
200
+ "CountryName":"Canada",
201
+ "AdministrativeArea":{
202
+ "AdministrativeAreaName":"Quebec",
203
+ "SubAdministrativeArea":{
204
+ "SubAdministrativeAreaName":"Le Haut-Richelieu",
205
+ "Locality":{
206
+ "LocalityName":"St-Luc",
207
+ "Thoroughfare":{
208
+ "ThoroughfareName":"Rue Dupuis"
209
+ }
210
+ }
211
+ }
212
+ }
213
+ }
214
+ }
215
+ }
216
+ },
217
+ "description":"St-Luc, St-Jean-sur-Richelieu, Le Haut-Richelieu, Quebec, Canada",
218
+ "name":"Rue Dupuis",
219
+ "boundedBy":{
220
+ "Envelope":{
221
+ "lowerCorner":"-73.253767 45.371677",
222
+ "upperCorner":"-73.249814 45.383244"
223
+ }
224
+ },
225
+ "Point":{
226
+ "pos":"-73.250829 45.377875"
227
+ }
228
+ }
229
+ },
230
+ {
231
+ "GeoObject":{
232
+ "metaDataProperty":{
233
+ "GeocoderMetaData":{
234
+ "kind":"house",
235
+ "text":"Canada, Quebec, Thérèse-de-Blainville, Blainville, Rue Corinne-Dupuis, 14",
236
+ "precision":"exact",
237
+ "AddressDetails":{
238
+ "Country":{
239
+ "AddressLine":"Quebec, Thérèse-de-Blainville, Blainville, Rue Corinne-Dupuis, 14",
240
+ "CountryNameCode":"CA",
241
+ "CountryName":"Canada",
242
+ "AdministrativeArea":{
243
+ "AdministrativeAreaName":"Quebec",
244
+ "SubAdministrativeArea":{
245
+ "SubAdministrativeAreaName":"Thérèse-de-Blainville",
246
+ "Locality":{
247
+ "LocalityName":"Blainville",
248
+ "Thoroughfare":{
249
+ "ThoroughfareName":"Rue Corinne-Dupuis",
250
+ "Premise":{
251
+ "PremiseNumber":"14"
252
+ }
253
+ }
254
+ }
255
+ }
256
+ }
257
+ }
258
+ }
259
+ }
260
+ },
261
+ "description":"Blainville, Thérèse-de-Blainville, Quebec, Canada",
262
+ "name":"Rue Corinne-Dupuis, 14",
263
+ "boundedBy":{
264
+ "Envelope":{
265
+ "lowerCorner":"-73.907956 45.692721",
266
+ "upperCorner":"-73.903859 45.695592"
267
+ }
268
+ },
269
+ "Point":{
270
+ "pos":"-73.905908 45.694157"
271
+ }
272
+ }
273
+ },
274
+ {
275
+ "GeoObject":{
276
+ "metaDataProperty":{
277
+ "GeocoderMetaData":{
278
+ "kind":"house",
279
+ "text":"Canada, Quebec, Gatineau, Hull, Rue Hormidas-Dupuis, 14",
280
+ "precision":"exact",
281
+ "AddressDetails":{
282
+ "Country":{
283
+ "AddressLine":"Quebec, Gatineau, Hull, Rue Hormidas-Dupuis, 14",
284
+ "CountryNameCode":"CA",
285
+ "CountryName":"Canada",
286
+ "AdministrativeArea":{
287
+ "AdministrativeAreaName":"Quebec",
288
+ "SubAdministrativeArea":{
289
+ "SubAdministrativeAreaName":"Gatineau",
290
+ "Locality":{
291
+ "DependentLocality":{
292
+ "DependentLocalityName":"Hull",
293
+ "Thoroughfare":{
294
+ "ThoroughfareName":"Rue Hormidas-Dupuis",
295
+ "Premise":{
296
+ "PremiseNumber":"14"
297
+ }
298
+ }
299
+ }
300
+ }
301
+ }
302
+ }
303
+ }
304
+ }
305
+ }
306
+ },
307
+ "description":"Hull, Gatineau, Quebec, Canada",
308
+ "name":"Rue Hormidas-Dupuis, 14",
309
+ "boundedBy":{
310
+ "Envelope":{
311
+ "lowerCorner":"-75.745594 45.421953",
312
+ "upperCorner":"-75.741498 45.424838"
313
+ }
314
+ },
315
+ "Point":{
316
+ "pos":"-75.743546 45.423396"
317
+ }
318
+ }
319
+ },
320
+ {
321
+ "GeoObject":{
322
+ "metaDataProperty":{
323
+ "GeocoderMetaData":{
324
+ "kind":"street",
325
+ "text":"Canada, Quebec, Roussillon, Châteauguay, Rue Dupuis",
326
+ "precision":"street",
327
+ "AddressDetails":{
328
+ "Country":{
329
+ "AddressLine":"Quebec, Roussillon, Châteauguay, Rue Dupuis",
330
+ "CountryNameCode":"CA",
331
+ "CountryName":"Canada",
332
+ "AdministrativeArea":{
333
+ "AdministrativeAreaName":"Quebec",
334
+ "SubAdministrativeArea":{
335
+ "SubAdministrativeAreaName":"Roussillon",
336
+ "Locality":{
337
+ "LocalityName":"Châteauguay",
338
+ "Thoroughfare":{
339
+ "ThoroughfareName":"Rue Dupuis"
340
+ }
341
+ }
342
+ }
343
+ }
344
+ }
345
+ }
346
+ }
347
+ },
348
+ "description":"Châteauguay, Roussillon, Quebec, Canada",
349
+ "name":"Rue Dupuis",
350
+ "boundedBy":{
351
+ "Envelope":{
352
+ "lowerCorner":"-73.708691 45.344539",
353
+ "upperCorner":"-73.703499 45.345287"
354
+ }
355
+ },
356
+ "Point":{
357
+ "pos":"-73.706086 45.344983"
358
+ }
359
+ }
360
+ },
361
+ {
362
+ "GeoObject":{
363
+ "metaDataProperty":{
364
+ "GeocoderMetaData":{
365
+ "kind":"street",
366
+ "text":"Canada, Quebec, Longueuil, Rue Dupuis",
367
+ "precision":"street",
368
+ "AddressDetails":{
369
+ "Country":{
370
+ "AddressLine":"Quebec, Longueuil, Rue Dupuis",
371
+ "CountryNameCode":"CA",
372
+ "CountryName":"Canada",
373
+ "AdministrativeArea":{
374
+ "AdministrativeAreaName":"Quebec",
375
+ "SubAdministrativeArea":{
376
+ "SubAdministrativeAreaName":"Longueuil",
377
+ "Locality":{
378
+ "LocalityName":"Longueuil",
379
+ "Thoroughfare":{
380
+ "ThoroughfareName":"Rue Dupuis"
381
+ }
382
+ }
383
+ }
384
+ }
385
+ }
386
+ }
387
+ }
388
+ },
389
+ "description":"Longueuil, Quebec, Canada",
390
+ "name":"Rue Dupuis",
391
+ "boundedBy":{
392
+ "Envelope":{
393
+ "lowerCorner":"-73.463631 45.515456",
394
+ "upperCorner":"-73.459193 45.516568"
395
+ }
396
+ },
397
+ "Point":{
398
+ "pos":"-73.461385 45.516094"
399
+ }
400
+ }
401
+ },
402
+ {
403
+ "GeoObject":{
404
+ "metaDataProperty":{
405
+ "GeocoderMetaData":{
406
+ "kind":"street",
407
+ "text":"Canada, Quebec, La Vallée-de-l'Or, Val-d'Or, Rue Dupuis",
408
+ "precision":"street",
409
+ "AddressDetails":{
410
+ "Country":{
411
+ "AddressLine":"Quebec, La Vallée-de-l'Or, Val-d'Or, Rue Dupuis",
412
+ "CountryNameCode":"CA",
413
+ "CountryName":"Canada",
414
+ "AdministrativeArea":{
415
+ "AdministrativeAreaName":"Quebec",
416
+ "SubAdministrativeArea":{
417
+ "SubAdministrativeAreaName":"La Vallée-de-l'Or",
418
+ "Locality":{
419
+ "LocalityName":"Val-d'Or",
420
+ "Thoroughfare":{
421
+ "ThoroughfareName":"Rue Dupuis"
422
+ }
423
+ }
424
+ }
425
+ }
426
+ }
427
+ }
428
+ }
429
+ },
430
+ "description":"Val-d'Or, La Vallée-de-l'Or, Quebec, Canada",
431
+ "name":"Rue Dupuis",
432
+ "boundedBy":{
433
+ "Envelope":{
434
+ "lowerCorner":"-77.810408 48.093635",
435
+ "upperCorner":"-77.807839 48.097637"
436
+ }
437
+ },
438
+ "Point":{
439
+ "pos":"-77.810390 48.095663"
440
+ }
441
+ }
442
+ }
443
+ ]
444
+ }
445
+ }
446
+ }