geocoder 1.5.1 → 1.6.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/CHANGELOG.md +45 -0
- data/LICENSE +1 -1
- data/README.md +16 -39
- data/bin/console +13 -0
- data/examples/autoexpire_cache_redis.rb +2 -0
- data/lib/easting_northing.rb +171 -0
- data/lib/geocoder/cache.rb +4 -0
- data/lib/geocoder/configuration.rb +2 -1
- data/lib/geocoder/configuration_hash.rb +4 -4
- data/lib/geocoder/ip_address.rb +2 -1
- data/lib/geocoder/lookup.rb +8 -3
- data/lib/geocoder/lookups/abstract_api.rb +46 -0
- data/lib/geocoder/lookups/ban_data_gouv_fr.rb +14 -1
- data/lib/geocoder/lookups/base.rb +2 -0
- data/lib/geocoder/lookups/esri.rb +6 -0
- data/lib/geocoder/lookups/freegeoip.rb +4 -4
- data/lib/geocoder/lookups/geocodio.rb +1 -1
- data/lib/geocoder/lookups/google.rb +7 -2
- data/lib/geocoder/lookups/google_places_details.rb +8 -14
- data/lib/geocoder/lookups/google_places_search.rb +28 -2
- data/lib/geocoder/lookups/google_premier.rb +4 -0
- data/lib/geocoder/lookups/here.rb +7 -16
- data/lib/geocoder/lookups/ip2location.rb +5 -13
- data/lib/geocoder/lookups/ipgeolocation.rb +51 -0
- data/lib/geocoder/lookups/ipregistry.rb +68 -0
- data/lib/geocoder/lookups/latlon.rb +1 -2
- data/lib/geocoder/lookups/maxmind_local.rb +7 -1
- data/lib/geocoder/lookups/nationaal_georegister_nl.rb +38 -0
- data/lib/geocoder/lookups/osmnames.rb +57 -0
- data/lib/geocoder/lookups/pickpoint.rb +1 -1
- data/lib/geocoder/lookups/smarty_streets.rb +6 -1
- data/lib/geocoder/lookups/telize.rb +1 -1
- data/lib/geocoder/lookups/tencent.rb +9 -9
- data/lib/geocoder/lookups/test.rb +4 -0
- data/lib/geocoder/lookups/uk_ordnance_survey_names.rb +59 -0
- data/lib/geocoder/lookups/yandex.rb +3 -4
- data/lib/geocoder/results/abstract_api.rb +146 -0
- data/lib/geocoder/results/baidu.rb +0 -4
- data/lib/geocoder/results/ban_data_gouv_fr.rb +27 -2
- data/lib/geocoder/results/db_ip_com.rb +1 -1
- data/lib/geocoder/results/here.rb +4 -1
- data/lib/geocoder/results/ipgeolocation.rb +59 -0
- data/lib/geocoder/results/ipregistry.rb +304 -0
- data/lib/geocoder/results/nationaal_georegister_nl.rb +62 -0
- data/lib/geocoder/results/nominatim.rb +4 -0
- data/lib/geocoder/results/osmnames.rb +56 -0
- data/lib/geocoder/results/uk_ordnance_survey_names.rb +59 -0
- data/lib/geocoder/results/yandex.rb +217 -59
- data/lib/geocoder/sql.rb +4 -4
- data/lib/geocoder/util.rb +29 -0
- data/lib/geocoder/version.rb +1 -1
- data/lib/maxmind_database.rb +3 -3
- metadata +22 -16
- data/lib/geocoder/lookups/geocoder_us.rb +0 -51
- data/lib/geocoder/results/geocoder_us.rb +0 -39
- data/lib/hash_recursive_merge.rb +0 -74
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 17d8f44da8b584b65c5546df089f0c16e6d20045676d4a1fe3fef38cdf3c3c59
|
4
|
+
data.tar.gz: c527329b8d1f28a326092e3b3f6d2c9c143dacc2da2397fab5b4109ae7387f09
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 918ed290277a1aa7e57a102ad06b0cf733e1908e9f31ead6cd59c5d08e5cc5b7d2f581a9958961781e013b535763c92701ad02f2bd8268374e339a36fd75eb25
|
7
|
+
data.tar.gz: 14416b59a9f34890d9a466aad87a883651f13f58a1f0a972c7d48370daed0f70923b9534b13e489673dbbc19543c82fb9017dd274529ce3a587bebe1f230649d
|
data/CHANGELOG.md
CHANGED
@@ -3,6 +3,51 @@ Changelog
|
|
3
3
|
|
4
4
|
Major changes to Geocoder for each release. Please see the Git log for complete list of changes.
|
5
5
|
|
6
|
+
1.6.7 (2021 Apr 17)
|
7
|
+
-------------------
|
8
|
+
* Add support for Abstract API lookup (thanks github.com/randoum).
|
9
|
+
|
10
|
+
1.6.6 (2021 Mar 4)
|
11
|
+
-------------------
|
12
|
+
* Rescue from exception on cache read/write error. Issue warning instead.
|
13
|
+
|
14
|
+
1.6.5 (2021 Feb 10)
|
15
|
+
-------------------
|
16
|
+
* Fix backward coordinates bug in NationaalregisterNl lookup (thanks github.com/Marthyn).
|
17
|
+
* Allow removal of single stubs in test mode (thanks github.com/jmmastey).
|
18
|
+
* Improve results for :ban_data_gouv_fr lookup (thanks github.com/Intrepidd).
|
19
|
+
|
20
|
+
1.6.4 (2020 Oct 6)
|
21
|
+
-------------------
|
22
|
+
* Various updates in response to geocoding API changes.
|
23
|
+
* Refactor of Google Places Search lookup (thanks github.com/maximilientyc).
|
24
|
+
|
25
|
+
1.6.3 (2020 Apr 30)
|
26
|
+
-------------------
|
27
|
+
* Update URL for :telize lookup (thanks github.com/alexwalling).
|
28
|
+
* Fix bug parsing IPv6 with port (thanks github.com/gdomingu).
|
29
|
+
|
30
|
+
1.6.2 (2020 Mar 16)
|
31
|
+
-------------------
|
32
|
+
* Add support for :nationaal_georegister_nl lookup (thanks github.com/opensourceame).
|
33
|
+
* Add support for :uk_ordnance_survey_names lookup (thanks github.com/pezholio).
|
34
|
+
* Refactor and fix bugs in Yandex lookup (thanks github.com/iarie and stereodenis).
|
35
|
+
|
36
|
+
1.6.1 (2020 Jan 23)
|
37
|
+
-------------------
|
38
|
+
* Sanitize lat/lon values passed to within_bounding_box to prevent SQL injection.
|
39
|
+
|
40
|
+
1.6.0 (2020 Jan 6)
|
41
|
+
-------------------
|
42
|
+
* Drop support for Rails 3.x.
|
43
|
+
* Add support for :osmnames lookup (thanks github.com/zacviandier).
|
44
|
+
* Add support for :ipgeolocation IP lookup (thanks github.com/ahsannawaz111).
|
45
|
+
|
46
|
+
1.5.2 (2019 Oct 3)
|
47
|
+
-------------------
|
48
|
+
* Add support for :ipregistry lookup (thanks github.com/ipregistry).
|
49
|
+
* Various fixes for Yandex lookup.
|
50
|
+
|
6
51
|
1.5.1 (2019 Jan 23)
|
7
52
|
-------------------
|
8
53
|
* Add support for :tencent lookup (thanks github.com/Anders-E).
|
data/LICENSE
CHANGED
data/README.md
CHANGED
@@ -1,29 +1,27 @@
|
|
1
1
|
Geocoder
|
2
2
|
========
|
3
3
|
|
4
|
-
**
|
4
|
+
**Complete geocoding solution for Ruby.**
|
5
5
|
|
6
6
|
[![Gem Version](https://badge.fury.io/rb/geocoder.svg)](http://badge.fury.io/rb/geocoder)
|
7
7
|
[![Code Climate](https://codeclimate.com/github/alexreisner/geocoder/badges/gpa.svg)](https://codeclimate.com/github/alexreisner/geocoder)
|
8
8
|
[![Build Status](https://travis-ci.org/alexreisner/geocoder.svg?branch=master)](https://travis-ci.org/alexreisner/geocoder)
|
9
|
-
[![GitHub Issues](https://img.shields.io/github/issues/alexreisner/geocoder.svg)](https://github.com/alexreisner/geocoder/issues)
|
10
|
-
[![License](https://img.shields.io/badge/license-MIT-blue.svg)](https://opensource.org/licenses/MIT)
|
11
9
|
|
12
10
|
Key features:
|
13
11
|
|
14
|
-
* Forward and reverse geocoding
|
12
|
+
* Forward and reverse geocoding.
|
13
|
+
* IP address geocoding.
|
15
14
|
* Connects to more than 40 APIs worldwide.
|
16
15
|
* Performance-enhancing features like caching.
|
17
|
-
* Advanced configuration allows different parameters and APIs to be used in different conditions.
|
18
16
|
* Integrates with ActiveRecord and Mongoid.
|
19
17
|
* Basic geospatial queries: search within radius (or rectangle, or ring).
|
20
18
|
|
21
19
|
Compatibility:
|
22
20
|
|
23
|
-
*
|
24
|
-
*
|
25
|
-
*
|
26
|
-
* Works
|
21
|
+
* Ruby versions: 2.x, and JRuby.
|
22
|
+
* Databases: MySQL, PostgreSQL, SQLite, and MongoDB.
|
23
|
+
* Rails: 4, 5, and 6.
|
24
|
+
* Works outside of Rails with the `json` (for MRI) or `json_pure` (for JRuby) gem.
|
27
25
|
|
28
26
|
|
29
27
|
Table of Contents
|
@@ -53,8 +51,8 @@ The Rest:
|
|
53
51
|
* [Technical Discussions](#technical-discussions)
|
54
52
|
* [Troubleshooting](#troubleshooting)
|
55
53
|
* [Known Issues](#known-issues)
|
56
|
-
* [Reporting Issues](#reporting-
|
57
|
-
* [Contributing](#
|
54
|
+
* [Reporting Issues](https://github.com/alexreisner/geocoder/blob/master/CONTRIBUTING.md#reporting-bugs)
|
55
|
+
* [Contributing](https://github.com/alexreisner/geocoder/blob/master/CONTRIBUTING.md#making-changes)
|
58
56
|
|
59
57
|
See Also:
|
60
58
|
|
@@ -215,7 +213,7 @@ Some common options are:
|
|
215
213
|
# set default units to kilometers:
|
216
214
|
units: :km,
|
217
215
|
|
218
|
-
# caching (see
|
216
|
+
# caching (see Caching section below for details):
|
219
217
|
cache: Redis.new,
|
220
218
|
cache_prefix: "..."
|
221
219
|
|
@@ -534,10 +532,14 @@ With the above stub defined, any query for "New York, NY" will return the result
|
|
534
532
|
]
|
535
533
|
)
|
536
534
|
|
535
|
+
You may also delete a single stub, or reset all stubs _including the default stub_:
|
536
|
+
|
537
|
+
Geocoder::Lookup::Test.delete_stub('New York, NY')
|
538
|
+
Geocoder::Lookup::Test.reset
|
539
|
+
|
537
540
|
Notes:
|
538
541
|
|
539
542
|
- Keys must be strings (not symbols) when calling `add_stub` or `set_default_stub`. For example `'country' =>` not `:country =>`.
|
540
|
-
- To clear stubs (e.g. prior to another spec), use `Geocoder::Lookup::Test.reset`. This will clear all stubs _including the default stub_.
|
541
543
|
- The stubbed result objects returned by the Test lookup do not support all the methods real result objects do. If you need to test interaction with real results it may be better to use an external stubbing tool and something like WebMock or VCR to prevent network calls.
|
542
544
|
|
543
545
|
|
@@ -678,29 +680,4 @@ If anyone has a more elegant solution to this problem I am very interested in se
|
|
678
680
|
The `near` method will not look across the 180th meridian to find objects close to a given point. In practice this is rarely an issue outside of New Zealand and certain surrounding islands. This problem does not exist with the zero-meridian. The problem is due to a shortcoming of the Haversine formula which Geocoder uses to calculate distances.
|
679
681
|
|
680
682
|
|
681
|
-
|
682
|
-
----------------
|
683
|
-
|
684
|
-
When reporting an issue, please list the version of Geocoder you are using and any relevant information about your application (Rails version, database type and version, etc). Please describe as specifically as you can what behavior you are seeing (eg: an error message? a nil return value?).
|
685
|
-
|
686
|
-
Please DO NOT use GitHub issues to ask questions about how to use Geocoder. Sites like [StackOverflow](http://www.stackoverflow.com/) are a better forum for such discussions.
|
687
|
-
|
688
|
-
|
689
|
-
Contributing
|
690
|
-
------------
|
691
|
-
|
692
|
-
Contributions are welcome via Github pull requests. If you are new to the project and looking for a way to get involved, try picking up an issue with a "beginner-task" label. Hints about what needs to be done are usually provided.
|
693
|
-
|
694
|
-
For all contributions, please respect the following guidelines:
|
695
|
-
|
696
|
-
* Each pull request should implement ONE feature or bugfix. If you want to add or fix more than one thing, submit more than one pull request.
|
697
|
-
* Do not commit changes to files that are irrelevant to your feature or bugfix (eg: `.gitignore`).
|
698
|
-
* Do not add dependencies on other gems.
|
699
|
-
* Do not add unnecessary `require` statements which could cause LoadErrors on certain systems.
|
700
|
-
* Remember: Geocoder needs to run outside of Rails. Don't assume things like ActiveSupport are available.
|
701
|
-
* Be willing to accept criticism and work on improving your code; Geocoder is used by thousands of developers and care must be taken not to introduce bugs.
|
702
|
-
* Be aware that the pull request review process is not immediate, and is generally proportional to the size of the pull request.
|
703
|
-
* If your pull request is merged, please do not ask for an immediate release of the gem. There are many factors contributing to when releases occur (remember that they affect thousands of apps with Geocoder in their Gemfiles). If necessary, please install from the Github source until the next official release.
|
704
|
-
|
705
|
-
|
706
|
-
Copyright (c) 2009-18 Alex Reisner, released under the MIT license.
|
683
|
+
Copyright :copyright: 2009-2021 Alex Reisner, released under the MIT license.
|
data/bin/console
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'bundler/setup'
|
4
|
+
require 'geocoder'
|
5
|
+
|
6
|
+
if File.exist?("api_keys.yml")
|
7
|
+
require 'yaml'
|
8
|
+
@api_keys = YAML.load(File.read("api_keys.yml"), symbolize_names: true)
|
9
|
+
Geocoder.configure(@api_keys)
|
10
|
+
end
|
11
|
+
|
12
|
+
require 'irb'
|
13
|
+
IRB.start
|
@@ -1,6 +1,8 @@
|
|
1
1
|
# This class implements a cache with simple delegation to the Redis store, but
|
2
2
|
# when it creates a key/value pair, it also sends an EXPIRE command with a TTL.
|
3
3
|
# It should be fairly simple to do the same thing with Memcached.
|
4
|
+
# Alternatively, this class could inherit from Redis, which would make most
|
5
|
+
# of the below methods unnecessary.
|
4
6
|
class AutoexpireCacheRedis
|
5
7
|
def initialize(store, ttl = 86400)
|
6
8
|
@store = store
|
@@ -0,0 +1,171 @@
|
|
1
|
+
module Geocoder
|
2
|
+
class EastingNorthing
|
3
|
+
attr_reader :easting, :northing, :lat_lng
|
4
|
+
|
5
|
+
def initialize(opts)
|
6
|
+
@easting = opts[:easting]
|
7
|
+
@northing = opts[:northing]
|
8
|
+
|
9
|
+
@lat_lng = to_WGS84(to_osgb_36)
|
10
|
+
end
|
11
|
+
|
12
|
+
private
|
13
|
+
|
14
|
+
def to_osgb_36
|
15
|
+
osgb_fo = 0.9996012717
|
16
|
+
northing0 = -100_000.0
|
17
|
+
easting0 = 400_000.0
|
18
|
+
phi0 = deg_to_rad(49.0)
|
19
|
+
lambda0 = deg_to_rad(-2.0)
|
20
|
+
a = 6_377_563.396
|
21
|
+
b = 6_356_256.909
|
22
|
+
eSquared = ((a * a) - (b * b)) / (a * a)
|
23
|
+
phi = 0.0
|
24
|
+
lambda = 0.0
|
25
|
+
n = (a - b) / (a + b)
|
26
|
+
m = 0.0
|
27
|
+
phiPrime = ((northing - northing0) / (a * osgb_fo)) + phi0
|
28
|
+
|
29
|
+
while (northing - northing0 - m) >= 0.001
|
30
|
+
m =
|
31
|
+
(b * osgb_fo)\
|
32
|
+
* (((1 + n + ((5.0 / 4.0) * n * n) + ((5.0 / 4.0) * n * n * n))\
|
33
|
+
* (phiPrime - phi0))\
|
34
|
+
- (((3 * n) + (3 * n * n) + ((21.0 / 8.0) * n * n * n))\
|
35
|
+
* Math.sin(phiPrime - phi0)\
|
36
|
+
* Math.cos(phiPrime + phi0))\
|
37
|
+
+ ((((15.0 / 8.0) * n * n) + ((15.0 / 8.0) * n * n * n))\
|
38
|
+
* Math.sin(2.0 * (phiPrime - phi0))\
|
39
|
+
* Math.cos(2.0 * (phiPrime + phi0)))\
|
40
|
+
- (((35.0 / 24.0) * n * n * n)\
|
41
|
+
* Math.sin(3.0 * (phiPrime - phi0))\
|
42
|
+
* Math.cos(3.0 * (phiPrime + phi0))))
|
43
|
+
|
44
|
+
phiPrime += (northing - northing0 - m) / (a * osgb_fo)
|
45
|
+
end
|
46
|
+
|
47
|
+
v = a * osgb_fo * ((1.0 - eSquared * sin_pow_2(phiPrime))**-0.5)
|
48
|
+
rho =
|
49
|
+
a\
|
50
|
+
* osgb_fo\
|
51
|
+
* (1.0 - eSquared)\
|
52
|
+
* ((1.0 - eSquared * sin_pow_2(phiPrime))**-1.5)
|
53
|
+
etaSquared = (v / rho) - 1.0
|
54
|
+
vii = Math.tan(phiPrime) / (2 * rho * v)
|
55
|
+
viii =
|
56
|
+
(Math.tan(phiPrime) / (24.0 * rho * (v**3.0)))\
|
57
|
+
* (5.0\
|
58
|
+
+ (3.0 * tan_pow_2(phiPrime))\
|
59
|
+
+ etaSquared\
|
60
|
+
- (9.0 * tan_pow_2(phiPrime) * etaSquared))
|
61
|
+
ix =
|
62
|
+
(Math.tan(phiPrime) / (720.0 * rho * (v**5.0)))\
|
63
|
+
* (61.0\
|
64
|
+
+ (90.0 * tan_pow_2(phiPrime))\
|
65
|
+
+ (45.0 * tan_pow_2(phiPrime) * tan_pow_2(phiPrime)))
|
66
|
+
x = sec(phiPrime) / v
|
67
|
+
xi =
|
68
|
+
(sec(phiPrime) / (6.0 * v * v * v))\
|
69
|
+
* ((v / rho) + (2 * tan_pow_2(phiPrime)))
|
70
|
+
xiii =
|
71
|
+
(sec(phiPrime) / (120.0 * (v**5.0)))\
|
72
|
+
* (5.0\
|
73
|
+
+ (28.0 * tan_pow_2(phiPrime))\
|
74
|
+
+ (24.0 * tan_pow_2(phiPrime) * tan_pow_2(phiPrime)))
|
75
|
+
xiia =
|
76
|
+
(sec(phiPrime) / (5040.0 * (v**7.0)))\
|
77
|
+
* (61.0\
|
78
|
+
+ (662.0 * tan_pow_2(phiPrime))\
|
79
|
+
+ (1320.0 * tan_pow_2(phiPrime) * tan_pow_2(phiPrime))\
|
80
|
+
+ (720.0\
|
81
|
+
* tan_pow_2(phiPrime)\
|
82
|
+
* tan_pow_2(phiPrime)\
|
83
|
+
* tan_pow_2(phiPrime)))
|
84
|
+
phi =
|
85
|
+
phiPrime\
|
86
|
+
- (vii * ((easting - easting0)**2.0))\
|
87
|
+
+ (viii * ((easting - easting0)**4.0))\
|
88
|
+
- (ix * ((easting - easting0)**6.0))
|
89
|
+
lambda =
|
90
|
+
lambda0\
|
91
|
+
+ (x * (easting - easting0))\
|
92
|
+
- (xi * ((easting - easting0)**3.0))\
|
93
|
+
+ (xiii * ((easting - easting0)**5.0))\
|
94
|
+
- (xiia * ((easting - easting0)**7.0))
|
95
|
+
|
96
|
+
[rad_to_deg(phi), rad_to_deg(lambda)]
|
97
|
+
end
|
98
|
+
|
99
|
+
def to_WGS84(latlng)
|
100
|
+
latitude = latlng[0]
|
101
|
+
longitude = latlng[1]
|
102
|
+
|
103
|
+
a = 6_377_563.396
|
104
|
+
b = 6_356_256.909
|
105
|
+
eSquared = ((a * a) - (b * b)) / (a * a)
|
106
|
+
|
107
|
+
phi = deg_to_rad(latitude)
|
108
|
+
lambda = deg_to_rad(longitude)
|
109
|
+
v = a / Math.sqrt(1 - eSquared * sin_pow_2(phi))
|
110
|
+
h = 0
|
111
|
+
x = (v + h) * Math.cos(phi) * Math.cos(lambda)
|
112
|
+
y = (v + h) * Math.cos(phi) * Math.sin(lambda)
|
113
|
+
z = ((1 - eSquared) * v + h) * Math.sin(phi)
|
114
|
+
|
115
|
+
tx = 446.448
|
116
|
+
ty = -124.157
|
117
|
+
tz = 542.060
|
118
|
+
|
119
|
+
s = -0.0000204894
|
120
|
+
rx = deg_to_rad(0.00004172222)
|
121
|
+
ry = deg_to_rad(0.00006861111)
|
122
|
+
rz = deg_to_rad(0.00023391666)
|
123
|
+
|
124
|
+
xB = tx + (x * (1 + s)) + (-rx * y) + (ry * z)
|
125
|
+
yB = ty + (rz * x) + (y * (1 + s)) + (-rx * z)
|
126
|
+
zB = tz + (-ry * x) + (rx * y) + (z * (1 + s))
|
127
|
+
|
128
|
+
a = 6_378_137.000
|
129
|
+
b = 6_356_752.3141
|
130
|
+
eSquared = ((a * a) - (b * b)) / (a * a)
|
131
|
+
|
132
|
+
lambdaB = rad_to_deg(Math.atan(yB / xB))
|
133
|
+
p = Math.sqrt((xB * xB) + (yB * yB))
|
134
|
+
phiN = Math.atan(zB / (p * (1 - eSquared)))
|
135
|
+
|
136
|
+
(1..10).each do |_i|
|
137
|
+
v = a / Math.sqrt(1 - eSquared * sin_pow_2(phiN))
|
138
|
+
phiN1 = Math.atan((zB + (eSquared * v * Math.sin(phiN))) / p)
|
139
|
+
phiN = phiN1
|
140
|
+
end
|
141
|
+
|
142
|
+
phiB = rad_to_deg(phiN)
|
143
|
+
|
144
|
+
[phiB, lambdaB]
|
145
|
+
end
|
146
|
+
|
147
|
+
def deg_to_rad(degrees)
|
148
|
+
degrees / 180.0 * Math::PI
|
149
|
+
end
|
150
|
+
|
151
|
+
def rad_to_deg(r)
|
152
|
+
(r / Math::PI) * 180
|
153
|
+
end
|
154
|
+
|
155
|
+
def sin_pow_2(x)
|
156
|
+
Math.sin(x) * Math.sin(x)
|
157
|
+
end
|
158
|
+
|
159
|
+
def cos_pow_2(x)
|
160
|
+
Math.cos(x) * Math.cos(x)
|
161
|
+
end
|
162
|
+
|
163
|
+
def tan_pow_2(x)
|
164
|
+
Math.tan(x) * Math.tan(x)
|
165
|
+
end
|
166
|
+
|
167
|
+
def sec(x)
|
168
|
+
1.0 / Math.cos(x)
|
169
|
+
end
|
170
|
+
end
|
171
|
+
end
|
data/lib/geocoder/cache.rb
CHANGED
@@ -18,6 +18,8 @@ module Geocoder
|
|
18
18
|
when store.respond_to?(:read)
|
19
19
|
store.read key_for(url)
|
20
20
|
end
|
21
|
+
rescue => e
|
22
|
+
warn "Geocoder cache read error: #{e}"
|
21
23
|
end
|
22
24
|
|
23
25
|
##
|
@@ -32,6 +34,8 @@ module Geocoder
|
|
32
34
|
when store.respond_to?(:write)
|
33
35
|
store.write key_for(url), value
|
34
36
|
end
|
37
|
+
rescue => e
|
38
|
+
warn "Geocoder cache write error: #{e}"
|
35
39
|
end
|
36
40
|
|
37
41
|
##
|
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'singleton'
|
2
2
|
require 'geocoder/configuration_hash'
|
3
|
+
require 'geocoder/util'
|
3
4
|
|
4
5
|
module Geocoder
|
5
6
|
|
@@ -85,7 +86,7 @@ module Geocoder
|
|
85
86
|
end
|
86
87
|
|
87
88
|
def configure(options)
|
88
|
-
@data
|
89
|
+
Util.recursive_hash_merge(@data, options)
|
89
90
|
end
|
90
91
|
|
91
92
|
def initialize # :nodoc
|
@@ -1,11 +1,11 @@
|
|
1
|
-
require 'hash_recursive_merge'
|
2
|
-
|
3
1
|
module Geocoder
|
4
2
|
class ConfigurationHash < Hash
|
5
|
-
include HashRecursiveMerge
|
6
|
-
|
7
3
|
def method_missing(meth, *args, &block)
|
8
4
|
has_key?(meth) ? self[meth] : super
|
9
5
|
end
|
6
|
+
|
7
|
+
def respond_to_missing?(meth, include_private = false)
|
8
|
+
has_key?(meth) || super
|
9
|
+
end
|
10
10
|
end
|
11
11
|
end
|
data/lib/geocoder/ip_address.rb
CHANGED
data/lib/geocoder/lookup.rb
CHANGED
@@ -32,11 +32,12 @@ module Geocoder
|
|
32
32
|
:google_places_search,
|
33
33
|
:bing,
|
34
34
|
:geocoder_ca,
|
35
|
-
:geocoder_us,
|
36
35
|
:yandex,
|
36
|
+
:nationaal_georegister_nl,
|
37
37
|
:nominatim,
|
38
38
|
:mapbox,
|
39
39
|
:mapquest,
|
40
|
+
:uk_ordnance_survey_names,
|
40
41
|
:opencagedata,
|
41
42
|
:pelias,
|
42
43
|
:pickpoint,
|
@@ -51,7 +52,8 @@ module Geocoder
|
|
51
52
|
:ban_data_gouv_fr,
|
52
53
|
:test,
|
53
54
|
:latlon,
|
54
|
-
:amap
|
55
|
+
:amap,
|
56
|
+
:osmnames
|
55
57
|
]
|
56
58
|
end
|
57
59
|
|
@@ -61,6 +63,7 @@ module Geocoder
|
|
61
63
|
def ip_services
|
62
64
|
@ip_services ||= [
|
63
65
|
:baidu_ip,
|
66
|
+
:abstract_api,
|
64
67
|
:freegeoip,
|
65
68
|
:geoip2,
|
66
69
|
:maxmind,
|
@@ -69,11 +72,13 @@ module Geocoder
|
|
69
72
|
:pointpin,
|
70
73
|
:maxmind_geoip2,
|
71
74
|
:ipinfo_io,
|
75
|
+
:ipregistry,
|
72
76
|
:ipapi_com,
|
73
77
|
:ipdata_co,
|
74
78
|
:db_ip_com,
|
75
79
|
:ipstack,
|
76
|
-
:ip2location
|
80
|
+
:ip2location,
|
81
|
+
:ipgeolocation
|
77
82
|
]
|
78
83
|
end
|
79
84
|
|