geocoder-kb 1.2.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (248) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +6 -0
  3. data/.travis.yml +31 -0
  4. data/CHANGELOG.md +384 -0
  5. data/LICENSE +20 -0
  6. data/README.md +1085 -0
  7. data/Rakefile +25 -0
  8. data/bin/geocode +5 -0
  9. data/examples/autoexpire_cache_dalli.rb +62 -0
  10. data/examples/autoexpire_cache_redis.rb +28 -0
  11. data/examples/cache_bypass.rb +48 -0
  12. data/examples/sidekiq_worker.rb +16 -0
  13. data/gemfiles/Gemfile.mongoid-2.4.x +16 -0
  14. data/lib/generators/geocoder/config/config_generator.rb +14 -0
  15. data/lib/generators/geocoder/config/templates/initializer.rb +21 -0
  16. data/lib/generators/geocoder/maxmind/geolite_city_generator.rb +28 -0
  17. data/lib/generators/geocoder/maxmind/geolite_country_generator.rb +28 -0
  18. data/lib/generators/geocoder/maxmind/templates/migration/geolite_city.rb +30 -0
  19. data/lib/generators/geocoder/maxmind/templates/migration/geolite_country.rb +17 -0
  20. data/lib/geocoder.rb +47 -0
  21. data/lib/geocoder/cache.rb +90 -0
  22. data/lib/geocoder/calculations.rb +428 -0
  23. data/lib/geocoder/cli.rb +121 -0
  24. data/lib/geocoder/configuration.rb +124 -0
  25. data/lib/geocoder/configuration_hash.rb +11 -0
  26. data/lib/geocoder/exceptions.rb +21 -0
  27. data/lib/geocoder/ip_address.rb +21 -0
  28. data/lib/geocoder/lookup.rb +102 -0
  29. data/lib/geocoder/lookups/amap.rb +55 -0
  30. data/lib/geocoder/lookups/baidu.rb +55 -0
  31. data/lib/geocoder/lookups/baidu_ip.rb +54 -0
  32. data/lib/geocoder/lookups/base.rb +302 -0
  33. data/lib/geocoder/lookups/bing.rb +59 -0
  34. data/lib/geocoder/lookups/dstk.rb +20 -0
  35. data/lib/geocoder/lookups/esri.rb +48 -0
  36. data/lib/geocoder/lookups/freegeoip.rb +47 -0
  37. data/lib/geocoder/lookups/geocoder_ca.rb +54 -0
  38. data/lib/geocoder/lookups/geocoder_us.rb +39 -0
  39. data/lib/geocoder/lookups/geocodio.rb +42 -0
  40. data/lib/geocoder/lookups/geoip2.rb +40 -0
  41. data/lib/geocoder/lookups/google.rb +67 -0
  42. data/lib/geocoder/lookups/google_places_details.rb +50 -0
  43. data/lib/geocoder/lookups/google_premier.rb +47 -0
  44. data/lib/geocoder/lookups/here.rb +62 -0
  45. data/lib/geocoder/lookups/mapquest.rb +60 -0
  46. data/lib/geocoder/lookups/maxmind.rb +90 -0
  47. data/lib/geocoder/lookups/maxmind_local.rb +58 -0
  48. data/lib/geocoder/lookups/nominatim.rb +52 -0
  49. data/lib/geocoder/lookups/okf.rb +43 -0
  50. data/lib/geocoder/lookups/opencagedata.rb +58 -0
  51. data/lib/geocoder/lookups/ovi.rb +62 -0
  52. data/lib/geocoder/lookups/pointpin.rb +68 -0
  53. data/lib/geocoder/lookups/postcode_anywhere_uk.rb +51 -0
  54. data/lib/geocoder/lookups/smarty_streets.rb +45 -0
  55. data/lib/geocoder/lookups/telize.rb +40 -0
  56. data/lib/geocoder/lookups/test.rb +44 -0
  57. data/lib/geocoder/lookups/yahoo.rb +88 -0
  58. data/lib/geocoder/lookups/yandex.rb +54 -0
  59. data/lib/geocoder/models/active_record.rb +50 -0
  60. data/lib/geocoder/models/base.rb +39 -0
  61. data/lib/geocoder/models/mongo_base.rb +64 -0
  62. data/lib/geocoder/models/mongo_mapper.rb +26 -0
  63. data/lib/geocoder/models/mongoid.rb +32 -0
  64. data/lib/geocoder/query.rb +111 -0
  65. data/lib/geocoder/railtie.rb +26 -0
  66. data/lib/geocoder/request.rb +25 -0
  67. data/lib/geocoder/results/amap.rb +85 -0
  68. data/lib/geocoder/results/baidu.rb +79 -0
  69. data/lib/geocoder/results/baidu_ip.rb +62 -0
  70. data/lib/geocoder/results/base.rb +67 -0
  71. data/lib/geocoder/results/bing.rb +48 -0
  72. data/lib/geocoder/results/dstk.rb +6 -0
  73. data/lib/geocoder/results/esri.rb +51 -0
  74. data/lib/geocoder/results/freegeoip.rb +45 -0
  75. data/lib/geocoder/results/geocoder_ca.rb +60 -0
  76. data/lib/geocoder/results/geocoder_us.rb +39 -0
  77. data/lib/geocoder/results/geocodio.rb +66 -0
  78. data/lib/geocoder/results/geoip2.rb +64 -0
  79. data/lib/geocoder/results/google.rb +124 -0
  80. data/lib/geocoder/results/google_places_details.rb +35 -0
  81. data/lib/geocoder/results/google_premier.rb +6 -0
  82. data/lib/geocoder/results/here.rb +62 -0
  83. data/lib/geocoder/results/mapquest.rb +51 -0
  84. data/lib/geocoder/results/maxmind.rb +135 -0
  85. data/lib/geocoder/results/maxmind_local.rb +49 -0
  86. data/lib/geocoder/results/nominatim.rb +94 -0
  87. data/lib/geocoder/results/okf.rb +106 -0
  88. data/lib/geocoder/results/opencagedata.rb +82 -0
  89. data/lib/geocoder/results/ovi.rb +62 -0
  90. data/lib/geocoder/results/pointpin.rb +44 -0
  91. data/lib/geocoder/results/postcode_anywhere_uk.rb +42 -0
  92. data/lib/geocoder/results/smarty_streets.rb +106 -0
  93. data/lib/geocoder/results/telize.rb +45 -0
  94. data/lib/geocoder/results/test.rb +33 -0
  95. data/lib/geocoder/results/yahoo.rb +55 -0
  96. data/lib/geocoder/results/yandex.rb +84 -0
  97. data/lib/geocoder/sql.rb +107 -0
  98. data/lib/geocoder/stores/active_record.rb +289 -0
  99. data/lib/geocoder/stores/base.rb +127 -0
  100. data/lib/geocoder/stores/mongo_base.rb +89 -0
  101. data/lib/geocoder/stores/mongo_mapper.rb +13 -0
  102. data/lib/geocoder/stores/mongoid.rb +13 -0
  103. data/lib/geocoder/version.rb +3 -0
  104. data/lib/hash_recursive_merge.rb +74 -0
  105. data/lib/maxmind_database.rb +109 -0
  106. data/lib/oauth_util.rb +112 -0
  107. data/lib/tasks/geocoder.rake +29 -0
  108. data/lib/tasks/maxmind.rake +73 -0
  109. data/test/fixtures/baidu_invalid_key +1 -0
  110. data/test/fixtures/baidu_ip_202_198_16_3 +19 -0
  111. data/test/fixtures/baidu_ip_invalid_key +1 -0
  112. data/test/fixtures/baidu_ip_no_results +1 -0
  113. data/test/fixtures/baidu_no_results +1 -0
  114. data/test/fixtures/baidu_reverse +1 -0
  115. data/test/fixtures/baidu_shanghai_pearl_tower +12 -0
  116. data/test/fixtures/bing_invalid_key +1 -0
  117. data/test/fixtures/bing_madison_square_garden +40 -0
  118. data/test/fixtures/bing_no_results +16 -0
  119. data/test/fixtures/bing_reverse +42 -0
  120. data/test/fixtures/cloudmade_invalid_key +1 -0
  121. data/test/fixtures/cloudmade_madison_square_garden +1 -0
  122. data/test/fixtures/cloudmade_no_results +1 -0
  123. data/test/fixtures/esri_madison_square_garden +59 -0
  124. data/test/fixtures/esri_no_results +8 -0
  125. data/test/fixtures/esri_reverse +21 -0
  126. data/test/fixtures/freegeoip_74_200_247_59 +12 -0
  127. data/test/fixtures/freegeoip_no_results +1 -0
  128. data/test/fixtures/geocoder_ca_madison_square_garden +1 -0
  129. data/test/fixtures/geocoder_ca_no_results +1 -0
  130. data/test/fixtures/geocoder_ca_reverse +34 -0
  131. data/test/fixtures/geocoder_us_madison_square_garden +1 -0
  132. data/test/fixtures/geocoder_us_no_results +1 -0
  133. data/test/fixtures/geocodio_1101_pennsylvania_ave +1 -0
  134. data/test/fixtures/geocodio_bad_api_key +3 -0
  135. data/test/fixtures/geocodio_invalid +4 -0
  136. data/test/fixtures/geocodio_no_results +1 -0
  137. data/test/fixtures/geocodio_over_query_limit +4 -0
  138. data/test/fixtures/google_garbage +456 -0
  139. data/test/fixtures/google_madison_square_garden +57 -0
  140. data/test/fixtures/google_no_city_data +44 -0
  141. data/test/fixtures/google_no_locality +51 -0
  142. data/test/fixtures/google_no_results +4 -0
  143. data/test/fixtures/google_over_limit +4 -0
  144. data/test/fixtures/google_places_details_invalid_request +4 -0
  145. data/test/fixtures/google_places_details_madison_square_garden +120 -0
  146. data/test/fixtures/google_places_details_no_results +4 -0
  147. data/test/fixtures/google_places_details_no_reviews +60 -0
  148. data/test/fixtures/google_places_details_no_types +66 -0
  149. data/test/fixtures/here_madison_square_garden +72 -0
  150. data/test/fixtures/here_no_results +8 -0
  151. data/test/fixtures/mapquest_error +16 -0
  152. data/test/fixtures/mapquest_invalid_api_key +16 -0
  153. data/test/fixtures/mapquest_invalid_request +16 -0
  154. data/test/fixtures/mapquest_madison_square_garden +52 -0
  155. data/test/fixtures/mapquest_no_results +16 -0
  156. data/test/fixtures/maxmind_24_24_24_21 +1 -0
  157. data/test/fixtures/maxmind_24_24_24_22 +1 -0
  158. data/test/fixtures/maxmind_24_24_24_23 +1 -0
  159. data/test/fixtures/maxmind_24_24_24_24 +1 -0
  160. data/test/fixtures/maxmind_74_200_247_59 +1 -0
  161. data/test/fixtures/maxmind_invalid_key +1 -0
  162. data/test/fixtures/maxmind_no_results +1 -0
  163. data/test/fixtures/nominatim_madison_square_garden +150 -0
  164. data/test/fixtures/nominatim_no_results +1 -0
  165. data/test/fixtures/nominatim_over_limit +1 -0
  166. data/test/fixtures/okf_kirstinmaki +67 -0
  167. data/test/fixtures/okf_no_results +4 -0
  168. data/test/fixtures/opencagedata_invalid_api_key +25 -0
  169. data/test/fixtures/opencagedata_invalid_request +26 -0
  170. data/test/fixtures/opencagedata_madison_square_garden +73 -0
  171. data/test/fixtures/opencagedata_no_results +29 -0
  172. data/test/fixtures/opencagedata_over_limit +31 -0
  173. data/test/fixtures/ovi_madison_square_garden +72 -0
  174. data/test/fixtures/ovi_no_results +8 -0
  175. data/test/fixtures/pointpin_10_10_10_10 +1 -0
  176. data/test/fixtures/pointpin_555_555_555_555 +1 -0
  177. data/test/fixtures/pointpin_80_111_555_555 +1 -0
  178. data/test/fixtures/pointpin_no_results +1 -0
  179. data/test/fixtures/postcode_anywhere_uk_geocode_v2_00_WR26NJ +1 -0
  180. data/test/fixtures/postcode_anywhere_uk_geocode_v2_00_generic_error +1 -0
  181. data/test/fixtures/postcode_anywhere_uk_geocode_v2_00_hampshire +1 -0
  182. data/test/fixtures/postcode_anywhere_uk_geocode_v2_00_key_limit_exceeded +1 -0
  183. data/test/fixtures/postcode_anywhere_uk_geocode_v2_00_no_results +1 -0
  184. data/test/fixtures/postcode_anywhere_uk_geocode_v2_00_romsey +1 -0
  185. data/test/fixtures/postcode_anywhere_uk_geocode_v2_00_unknown_key +1 -0
  186. data/test/fixtures/smarty_streets_11211 +1 -0
  187. data/test/fixtures/smarty_streets_madison_square_garden +47 -0
  188. data/test/fixtures/smarty_streets_no_results +1 -0
  189. data/test/fixtures/telize_10_10_10_10 +1 -0
  190. data/test/fixtures/telize_555_555_555_555 +4 -0
  191. data/test/fixtures/telize_74_200_247_59 +1 -0
  192. data/test/fixtures/telize_no_results +1 -0
  193. data/test/fixtures/yahoo_error +1 -0
  194. data/test/fixtures/yahoo_invalid_key +2 -0
  195. data/test/fixtures/yahoo_madison_square_garden +52 -0
  196. data/test/fixtures/yahoo_no_results +10 -0
  197. data/test/fixtures/yahoo_over_limit +2 -0
  198. data/test/fixtures/yandex_canada_rue_dupuis_14 +446 -0
  199. data/test/fixtures/yandex_invalid_key +1 -0
  200. data/test/fixtures/yandex_kremlin +48 -0
  201. data/test/fixtures/yandex_new_york +1 -0
  202. data/test/fixtures/yandex_no_city_and_town +112 -0
  203. data/test/fixtures/yandex_no_results +16 -0
  204. data/test/integration/http_client_test.rb +31 -0
  205. data/test/mongoid_test_helper.rb +43 -0
  206. data/test/test_helper.rb +416 -0
  207. data/test/unit/active_record_test.rb +16 -0
  208. data/test/unit/cache_test.rb +37 -0
  209. data/test/unit/calculations_test.rb +220 -0
  210. data/test/unit/configuration_test.rb +55 -0
  211. data/test/unit/error_handling_test.rb +56 -0
  212. data/test/unit/geocoder_test.rb +78 -0
  213. data/test/unit/https_test.rb +17 -0
  214. data/test/unit/ip_address_test.rb +27 -0
  215. data/test/unit/lookup_test.rb +153 -0
  216. data/test/unit/lookups/bing_test.rb +68 -0
  217. data/test/unit/lookups/dstk_test.rb +26 -0
  218. data/test/unit/lookups/esri_test.rb +48 -0
  219. data/test/unit/lookups/freegeoip_test.rb +27 -0
  220. data/test/unit/lookups/geocoder_ca_test.rb +17 -0
  221. data/test/unit/lookups/geocodio_test.rb +55 -0
  222. data/test/unit/lookups/geoip2_test.rb +27 -0
  223. data/test/unit/lookups/google_places_details_test.rb +122 -0
  224. data/test/unit/lookups/google_premier_test.rb +22 -0
  225. data/test/unit/lookups/google_test.rb +84 -0
  226. data/test/unit/lookups/mapquest_test.rb +60 -0
  227. data/test/unit/lookups/maxmind_local_test.rb +28 -0
  228. data/test/unit/lookups/maxmind_test.rb +63 -0
  229. data/test/unit/lookups/nominatim_test.rb +31 -0
  230. data/test/unit/lookups/okf_test.rb +38 -0
  231. data/test/unit/lookups/opencagedata_test.rb +64 -0
  232. data/test/unit/lookups/pointpin_test.rb +30 -0
  233. data/test/unit/lookups/postcode_anywhere_uk_test.rb +70 -0
  234. data/test/unit/lookups/smarty_streets_test.rb +71 -0
  235. data/test/unit/lookups/telize_test.rb +36 -0
  236. data/test/unit/lookups/yahoo_test.rb +35 -0
  237. data/test/unit/method_aliases_test.rb +26 -0
  238. data/test/unit/model_test.rb +38 -0
  239. data/test/unit/mongoid_test.rb +47 -0
  240. data/test/unit/near_test.rb +87 -0
  241. data/test/unit/oauth_util_test.rb +31 -0
  242. data/test/unit/proxy_test.rb +37 -0
  243. data/test/unit/query_test.rb +52 -0
  244. data/test/unit/rake_task_test.rb +21 -0
  245. data/test/unit/request_test.rb +35 -0
  246. data/test/unit/result_test.rb +72 -0
  247. data/test/unit/test_mode_test.rb +70 -0
  248. metadata +294 -0
@@ -0,0 +1,456 @@
1
+ {
2
+ "status": "OK",
3
+ "results": [ {
4
+ "types": [ "postal_code" ],
5
+ "formatted_address": "Hedge End, Southampton, Hampshire SO30 4RT, UK",
6
+ "address_components": [ {
7
+ "long_name": "SO30 4RT",
8
+ "short_name": "SO30 4RT",
9
+ "types": [ "postal_code" ]
10
+ }, {
11
+ "long_name": "Hedge End",
12
+ "short_name": "Hedge End",
13
+ "types": [ "sublocality", "political" ]
14
+ }, {
15
+ "long_name": "Southampton",
16
+ "short_name": "Southampton",
17
+ "types": [ "locality", "political" ]
18
+ }, {
19
+ "long_name": "Hampshire",
20
+ "short_name": "Hampshire",
21
+ "types": [ "administrative_area_level_2", "political" ]
22
+ }, {
23
+ "long_name": "United Kingdom",
24
+ "short_name": "GB",
25
+ "types": [ "country", "political" ]
26
+ }, {
27
+ "long_name": "SO30",
28
+ "short_name": "SO30",
29
+ "types": [ "postal_code_prefix", "postal_code" ]
30
+ } ],
31
+ "geometry": {
32
+ "location": {
33
+ "lat": 50.9173897,
34
+ "lng": -1.3125111
35
+ },
36
+ "location_type": "APPROXIMATE",
37
+ "viewport": {
38
+ "southwest": {
39
+ "lat": 50.9142421,
40
+ "lng": -1.3156587
41
+ },
42
+ "northeast": {
43
+ "lat": 50.9205373,
44
+ "lng": -1.3093635
45
+ }
46
+ }
47
+ },
48
+ "partial_match": true
49
+ }, {
50
+ "types": [ "postal_code" ],
51
+ "formatted_address": "Enfield, London N13 4RT, UK",
52
+ "address_components": [ {
53
+ "long_name": "N13 4RT",
54
+ "short_name": "N13 4RT",
55
+ "types": [ "postal_code" ]
56
+ }, {
57
+ "long_name": "London",
58
+ "short_name": "London",
59
+ "types": [ "locality", "political" ]
60
+ }, {
61
+ "long_name": "Enfield",
62
+ "short_name": "Enfield",
63
+ "types": [ "administrative_area_level_3", "political" ]
64
+ }, {
65
+ "long_name": "Greater London",
66
+ "short_name": "Greater London",
67
+ "types": [ "administrative_area_level_2", "political" ]
68
+ }, {
69
+ "long_name": "United Kingdom",
70
+ "short_name": "GB",
71
+ "types": [ "country", "political" ]
72
+ }, {
73
+ "long_name": "N13",
74
+ "short_name": "N13",
75
+ "types": [ "postal_code_prefix", "postal_code" ]
76
+ } ],
77
+ "geometry": {
78
+ "location": {
79
+ "lat": 51.6329009,
80
+ "lng": -0.0994552
81
+ },
82
+ "location_type": "APPROXIMATE",
83
+ "viewport": {
84
+ "southwest": {
85
+ "lat": 51.6297533,
86
+ "lng": -0.1026028
87
+ },
88
+ "northeast": {
89
+ "lat": 51.6360485,
90
+ "lng": -0.0963076
91
+ }
92
+ }
93
+ },
94
+ "partial_match": true
95
+ }, {
96
+ "types": [ "postal_code" ],
97
+ "formatted_address": "Cardiff, South Glamorgan CF5 4RT, UK",
98
+ "address_components": [ {
99
+ "long_name": "CF5 4RT",
100
+ "short_name": "CF5 4RT",
101
+ "types": [ "postal_code" ]
102
+ }, {
103
+ "long_name": "Caerau",
104
+ "short_name": "Caerau",
105
+ "types": [ "locality", "political" ]
106
+ }, {
107
+ "long_name": "Cardiff",
108
+ "short_name": "Cardiff",
109
+ "types": [ "locality", "political" ]
110
+ }, {
111
+ "long_name": "South Glamorgan",
112
+ "short_name": "South Glam",
113
+ "types": [ "administrative_area_level_2", "political" ]
114
+ }, {
115
+ "long_name": "Cardiff",
116
+ "short_name": "Cardiff",
117
+ "types": [ "administrative_area_level_2", "political" ]
118
+ }, {
119
+ "long_name": "United Kingdom",
120
+ "short_name": "GB",
121
+ "types": [ "country", "political" ]
122
+ }, {
123
+ "long_name": "CF5",
124
+ "short_name": "CF5",
125
+ "types": [ "postal_code_prefix", "postal_code" ]
126
+ } ],
127
+ "geometry": {
128
+ "location": {
129
+ "lat": 51.4675314,
130
+ "lng": -3.2642245
131
+ },
132
+ "location_type": "APPROXIMATE",
133
+ "viewport": {
134
+ "southwest": {
135
+ "lat": 51.4643838,
136
+ "lng": -3.2673721
137
+ },
138
+ "northeast": {
139
+ "lat": 51.4706790,
140
+ "lng": -3.2610769
141
+ }
142
+ }
143
+ },
144
+ "partial_match": true
145
+ }, {
146
+ "types": [ "postal_code" ],
147
+ "formatted_address": "Monifieth, Dundee, Angus DD5 4RT, UK",
148
+ "address_components": [ {
149
+ "long_name": "DD5 4RT",
150
+ "short_name": "DD5 4RT",
151
+ "types": [ "postal_code" ]
152
+ }, {
153
+ "long_name": "Monifieth",
154
+ "short_name": "Monifieth",
155
+ "types": [ "sublocality", "political" ]
156
+ }, {
157
+ "long_name": "Dundee",
158
+ "short_name": "Dundee",
159
+ "types": [ "locality", "political" ]
160
+ }, {
161
+ "long_name": "Angus",
162
+ "short_name": "Angus",
163
+ "types": [ "administrative_area_level_2", "political" ]
164
+ }, {
165
+ "long_name": "United Kingdom",
166
+ "short_name": "GB",
167
+ "types": [ "country", "political" ]
168
+ }, {
169
+ "long_name": "DD5",
170
+ "short_name": "DD5",
171
+ "types": [ "postal_code_prefix", "postal_code" ]
172
+ } ],
173
+ "geometry": {
174
+ "location": {
175
+ "lat": 56.4840193,
176
+ "lng": -2.8291620
177
+ },
178
+ "location_type": "APPROXIMATE",
179
+ "viewport": {
180
+ "southwest": {
181
+ "lat": 56.4808717,
182
+ "lng": -2.8323096
183
+ },
184
+ "northeast": {
185
+ "lat": 56.4871669,
186
+ "lng": -2.8260144
187
+ }
188
+ }
189
+ },
190
+ "partial_match": true
191
+ }, {
192
+ "types": [ "postal_code" ],
193
+ "formatted_address": "Reading RG30 4RT, UK",
194
+ "address_components": [ {
195
+ "long_name": "RG30 4RT",
196
+ "short_name": "RG30 4RT",
197
+ "types": [ "postal_code" ]
198
+ }, {
199
+ "long_name": "Reading",
200
+ "short_name": "Reading",
201
+ "types": [ "locality", "political" ]
202
+ }, {
203
+ "long_name": "Reading",
204
+ "short_name": "Reading",
205
+ "types": [ "administrative_area_level_2", "political" ]
206
+ }, {
207
+ "long_name": "United Kingdom",
208
+ "short_name": "GB",
209
+ "types": [ "country", "political" ]
210
+ }, {
211
+ "long_name": "RG30",
212
+ "short_name": "RG30",
213
+ "types": [ "postal_code_prefix", "postal_code" ]
214
+ } ],
215
+ "geometry": {
216
+ "location": {
217
+ "lat": 51.4554901,
218
+ "lng": -1.0393378
219
+ },
220
+ "location_type": "APPROXIMATE",
221
+ "viewport": {
222
+ "southwest": {
223
+ "lat": 51.4523425,
224
+ "lng": -1.0424854
225
+ },
226
+ "northeast": {
227
+ "lat": 51.4586377,
228
+ "lng": -1.0361902
229
+ }
230
+ }
231
+ },
232
+ "partial_match": true
233
+ }, {
234
+ "types": [ "postal_code" ],
235
+ "formatted_address": "Blyth, Northumberland NE24 4RT, UK",
236
+ "address_components": [ {
237
+ "long_name": "NE24 4RT",
238
+ "short_name": "NE24 4RT",
239
+ "types": [ "postal_code" ]
240
+ }, {
241
+ "long_name": "Blyth",
242
+ "short_name": "Blyth",
243
+ "types": [ "locality", "political" ]
244
+ }, {
245
+ "long_name": "Northumberland",
246
+ "short_name": "Nthumb",
247
+ "types": [ "administrative_area_level_2", "political" ]
248
+ }, {
249
+ "long_name": "United Kingdom",
250
+ "short_name": "GB",
251
+ "types": [ "country", "political" ]
252
+ }, {
253
+ "long_name": "NE24",
254
+ "short_name": "NE24",
255
+ "types": [ "postal_code_prefix", "postal_code" ]
256
+ } ],
257
+ "geometry": {
258
+ "location": {
259
+ "lat": 55.1314523,
260
+ "lng": -1.5533331
261
+ },
262
+ "location_type": "APPROXIMATE",
263
+ "viewport": {
264
+ "southwest": {
265
+ "lat": 55.1283047,
266
+ "lng": -1.5564807
267
+ },
268
+ "northeast": {
269
+ "lat": 55.1345999,
270
+ "lng": -1.5501855
271
+ }
272
+ }
273
+ },
274
+ "partial_match": true
275
+ }, {
276
+ "types": [ "postal_code" ],
277
+ "formatted_address": "Glasgow, Glasgow City G44 4RT, UK",
278
+ "address_components": [ {
279
+ "long_name": "G44 4RT",
280
+ "short_name": "G44 4RT",
281
+ "types": [ "postal_code" ]
282
+ }, {
283
+ "long_name": "Glasgow",
284
+ "short_name": "Glasgow",
285
+ "types": [ "locality", "political" ]
286
+ }, {
287
+ "long_name": "Glasgow City",
288
+ "short_name": "Glasgow City",
289
+ "types": [ "administrative_area_level_2", "political" ]
290
+ }, {
291
+ "long_name": "United Kingdom",
292
+ "short_name": "GB",
293
+ "types": [ "country", "political" ]
294
+ }, {
295
+ "long_name": "G44",
296
+ "short_name": "G44",
297
+ "types": [ "postal_code_prefix", "postal_code" ]
298
+ } ],
299
+ "geometry": {
300
+ "location": {
301
+ "lat": 55.8234812,
302
+ "lng": -4.2507991
303
+ },
304
+ "location_type": "APPROXIMATE",
305
+ "viewport": {
306
+ "southwest": {
307
+ "lat": 55.8203336,
308
+ "lng": -4.2539467
309
+ },
310
+ "northeast": {
311
+ "lat": 55.8266288,
312
+ "lng": -4.2476515
313
+ }
314
+ }
315
+ },
316
+ "partial_match": true
317
+ }, {
318
+ "types": [ "postal_code" ],
319
+ "formatted_address": "Waltham Forest, London E17 4RT, UK",
320
+ "address_components": [ {
321
+ "long_name": "E17 4RT",
322
+ "short_name": "E17 4RT",
323
+ "types": [ "postal_code" ]
324
+ }, {
325
+ "long_name": "London",
326
+ "short_name": "London",
327
+ "types": [ "locality", "political" ]
328
+ }, {
329
+ "long_name": "Walthamstow",
330
+ "short_name": "Walthamstow",
331
+ "types": [ "locality", "political" ]
332
+ }, {
333
+ "long_name": "Waltham Forest",
334
+ "short_name": "Waltham Forest",
335
+ "types": [ "administrative_area_level_3", "political" ]
336
+ }, {
337
+ "long_name": "Greater London",
338
+ "short_name": "Greater London",
339
+ "types": [ "administrative_area_level_2", "political" ]
340
+ }, {
341
+ "long_name": "United Kingdom",
342
+ "short_name": "GB",
343
+ "types": [ "country", "political" ]
344
+ }, {
345
+ "long_name": "E17",
346
+ "short_name": "E17",
347
+ "types": [ "postal_code_prefix", "postal_code" ]
348
+ } ],
349
+ "geometry": {
350
+ "location": {
351
+ "lat": 51.5853714,
352
+ "lng": -0.0192463
353
+ },
354
+ "location_type": "APPROXIMATE",
355
+ "viewport": {
356
+ "southwest": {
357
+ "lat": 51.5822238,
358
+ "lng": -0.0223939
359
+ },
360
+ "northeast": {
361
+ "lat": 51.5885190,
362
+ "lng": -0.0160987
363
+ }
364
+ }
365
+ },
366
+ "partial_match": true
367
+ }, {
368
+ "types": [ "postal_code" ],
369
+ "formatted_address": "Dunstable, Central Bedfordshire LU5 4RT, UK",
370
+ "address_components": [ {
371
+ "long_name": "LU5 4RT",
372
+ "short_name": "LU5 4RT",
373
+ "types": [ "postal_code" ]
374
+ }, {
375
+ "long_name": "Dunstable",
376
+ "short_name": "Dunstable",
377
+ "types": [ "locality", "political" ]
378
+ }, {
379
+ "long_name": "Central Bedfordshire",
380
+ "short_name": "Central Bedfordshire",
381
+ "types": [ "administrative_area_level_2", "political" ]
382
+ }, {
383
+ "long_name": "United Kingdom",
384
+ "short_name": "GB",
385
+ "types": [ "country", "political" ]
386
+ }, {
387
+ "long_name": "LU5",
388
+ "short_name": "LU5",
389
+ "types": [ "postal_code_prefix", "postal_code" ]
390
+ } ],
391
+ "geometry": {
392
+ "location": {
393
+ "lat": 51.8869978,
394
+ "lng": -0.5175666
395
+ },
396
+ "location_type": "APPROXIMATE",
397
+ "viewport": {
398
+ "southwest": {
399
+ "lat": 51.8838502,
400
+ "lng": -0.5207142
401
+ },
402
+ "northeast": {
403
+ "lat": 51.8901454,
404
+ "lng": -0.5144190
405
+ }
406
+ }
407
+ },
408
+ "partial_match": true
409
+ }, {
410
+ "types": [ "postal_code" ],
411
+ "formatted_address": "Newton Aycliffe, County Durham DL5 4RT, UK",
412
+ "address_components": [ {
413
+ "long_name": "DL5 4RT",
414
+ "short_name": "DL5 4RT",
415
+ "types": [ "postal_code" ]
416
+ }, {
417
+ "long_name": "Newton Aycliffe",
418
+ "short_name": "Newton Aycliffe",
419
+ "types": [ "locality", "political" ]
420
+ }, {
421
+ "long_name": "Great Aycliffe",
422
+ "short_name": "Great Aycliffe",
423
+ "types": [ "locality", "political" ]
424
+ }, {
425
+ "long_name": "Durham",
426
+ "short_name": "Dur",
427
+ "types": [ "administrative_area_level_2", "political" ]
428
+ }, {
429
+ "long_name": "United Kingdom",
430
+ "short_name": "GB",
431
+ "types": [ "country", "political" ]
432
+ }, {
433
+ "long_name": "DL5",
434
+ "short_name": "DL5",
435
+ "types": [ "postal_code_prefix", "postal_code" ]
436
+ } ],
437
+ "geometry": {
438
+ "location": {
439
+ "lat": 54.6323273,
440
+ "lng": -1.5704658
441
+ },
442
+ "location_type": "APPROXIMATE",
443
+ "viewport": {
444
+ "southwest": {
445
+ "lat": 54.6291797,
446
+ "lng": -1.5736134
447
+ },
448
+ "northeast": {
449
+ "lat": 54.6354749,
450
+ "lng": -1.5673182
451
+ }
452
+ }
453
+ },
454
+ "partial_match": true
455
+ } ]
456
+ }