geohash_ruby 1.0.1 → 1.0.2
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 +4 -4
- data/README.md +9 -11
- data/geohash_ruby.gemspec +3 -3
- data/lib/geohash_ruby.rb +29 -40
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 58b261ba8d6019211aff6d78da4ae095c05837cf
|
4
|
+
data.tar.gz: 310de7511ed3db7027839a1c91f4c788f6076503
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 974eefbf2b3872546c470196188d0442bb8889b45dda737520d87bae5e48fccb558635d685c0d93850b0d0041bd852e0001e362e8089c02c2c051773ef51ef36
|
7
|
+
data.tar.gz: f234b3d48872abea48e849a475def66842e39ff9e240c3f5940d15ce26d742daeb8d6d8ba795291c5ff0f61aa503286bc99b661a3a3f4c24f79455c5ce277e3b
|
data/README.md
CHANGED
@@ -1,9 +1,7 @@
|
|
1
|
-
|
1
|
+
Geohash
|
2
2
|
=======
|
3
3
|
|
4
|
-
|
5
|
-
|
6
|
-
Based on [masuidrive/pr_geohash](https://github.com/masuidrive/pr_geohash), which isn't good implementation.
|
4
|
+
Geohash en/decode library written in Ruby.
|
7
5
|
|
8
6
|
|
9
7
|
Install
|
@@ -20,31 +18,31 @@ Usage
|
|
20
18
|
### Encode latitude and longitude into geohash
|
21
19
|
|
22
20
|
```ruby
|
23
|
-
|
21
|
+
Geohash.encode 47.6062095, -122.3320708
|
24
22
|
#=> "c23nb62w20st"
|
25
23
|
|
26
|
-
|
24
|
+
Geohash.encode 47.6062095, -122.3320708, 6
|
27
25
|
#=> "c23nb6"
|
28
26
|
```
|
29
27
|
|
30
28
|
### Decode from geohash
|
31
29
|
|
32
30
|
```ruby
|
33
|
-
|
31
|
+
Geohash.decode 'c23nb6'
|
34
32
|
#=> [[47.603759765625, -122.332763671875], [47.6092529296875, -122.32177734375]]
|
35
33
|
```
|
36
34
|
|
37
|
-
###
|
35
|
+
### Adjacent
|
38
36
|
|
39
37
|
```ruby
|
40
|
-
|
38
|
+
Geohash.adjacent 'c23nb6', :top
|
41
39
|
#=> "c23nb7"
|
42
40
|
```
|
43
41
|
|
44
42
|
### Neighbors
|
45
43
|
|
46
44
|
```ruby
|
47
|
-
|
45
|
+
Geohash.neighbors 'xn774c'
|
48
46
|
#=> ["xn774f", "xn7754", "xn7751", "xn7750", "xn774b", "xn7748", "xn7749", "xn774d"]
|
49
47
|
|
50
48
|
=begin
|
@@ -61,7 +59,7 @@ GeoHash.neighbors 'xn774c'
|
|
61
59
|
### Walk
|
62
60
|
|
63
61
|
```ruby
|
64
|
-
|
62
|
+
Geohash.walk 'xn774c', [
|
65
63
|
:top,
|
66
64
|
:right,
|
67
65
|
:bottom, :bottom,
|
data/geohash_ruby.gemspec
CHANGED
@@ -5,11 +5,11 @@ require 'geohash_ruby'
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |spec|
|
7
7
|
spec.name = 'geohash_ruby'
|
8
|
-
spec.version =
|
8
|
+
spec.version = Geohash::VERSION
|
9
9
|
spec.authors = ['Yuki Iwanaga']
|
10
10
|
spec.email = ['yuki@creasty.com']
|
11
|
-
spec.summary = '
|
12
|
-
spec.description = '
|
11
|
+
spec.summary = 'Geohash en/decode library written in ruby'
|
12
|
+
spec.description = 'Geohash en/decode library written in ruby'
|
13
13
|
spec.homepage = 'https://github.com/creasty/geohash_ruby'
|
14
14
|
spec.license = 'MIT'
|
15
15
|
|
data/lib/geohash_ruby.rb
CHANGED
@@ -1,33 +1,33 @@
|
|
1
|
-
module
|
1
|
+
module Geohash
|
2
2
|
|
3
|
-
VERSION = '1.0.
|
3
|
+
VERSION = '1.0.2'
|
4
4
|
|
5
5
|
BASE32 = '0123456789bcdefghjkmnpqrstuvwxyz'
|
6
6
|
|
7
7
|
NEIGHBORS = {
|
8
|
-
right:
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
left:
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
top:
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
bottom:
|
21
|
-
|
22
|
-
|
23
|
-
|
8
|
+
right: [
|
9
|
+
'bc01fg45238967deuvhjyznpkmstqrwx',
|
10
|
+
'p0r21436x8zb9dcf5h7kjnmqesgutwvy',
|
11
|
+
],
|
12
|
+
left: [
|
13
|
+
'238967debc01fg45kmstqrwxuvhjyznp',
|
14
|
+
'14365h7k9dcfesgujnmqp0r2twvyx8zb',
|
15
|
+
],
|
16
|
+
top: [
|
17
|
+
'p0r21436x8zb9dcf5h7kjnmqesgutwvy',
|
18
|
+
'bc01fg45238967deuvhjyznpkmstqrwx',
|
19
|
+
],
|
20
|
+
bottom: [
|
21
|
+
'14365h7k9dcfesgujnmqp0r2twvyx8zb',
|
22
|
+
'238967debc01fg45kmstqrwxuvhjyznp',
|
23
|
+
]
|
24
24
|
}
|
25
25
|
|
26
26
|
BORDERS = {
|
27
|
-
right:
|
28
|
-
left:
|
29
|
-
top:
|
30
|
-
bottom:
|
27
|
+
right: ['bcfguvyz', 'prxz'],
|
28
|
+
left: ['0145hjnp', '028b'],
|
29
|
+
top: ['prxz', 'bcfguvyz'],
|
30
|
+
bottom: ['028b', '0145hjnp'],
|
31
31
|
}
|
32
32
|
|
33
33
|
@@neighbors_cache = {}
|
@@ -79,7 +79,7 @@ module_function
|
|
79
79
|
mids = [latitude, longitude]
|
80
80
|
bounds = [[-90.0, +90.0], [-180.0, +180.0]]
|
81
81
|
|
82
|
-
geohash =
|
82
|
+
geohash = ''
|
83
83
|
|
84
84
|
precision.times do |i|
|
85
85
|
d = 0
|
@@ -95,7 +95,7 @@ module_function
|
|
95
95
|
geohash << BASE32[d]
|
96
96
|
end
|
97
97
|
|
98
|
-
geohash
|
98
|
+
geohash
|
99
99
|
end
|
100
100
|
|
101
101
|
###
|
@@ -137,15 +137,12 @@ module_function
|
|
137
137
|
return @@adjacent_cache[dir][geohash] if @@adjacent_cache[dir][geohash]
|
138
138
|
|
139
139
|
head, last = geohash[0..-2], geohash[-1]
|
140
|
-
|
140
|
+
parity = geohash.length & 1
|
141
141
|
|
142
|
-
head = adjacent(head, dir) if BORDERS[dir][
|
142
|
+
head = adjacent(head, dir) if BORDERS[dir][parity].include?(last)
|
143
143
|
|
144
|
-
# NOTICE:
|
145
|
-
|
146
|
-
# head possibly be cached so that mustn't be mutated,
|
147
|
-
# just create new String instance with it
|
148
|
-
head = head + BASE32[NEIGHBORS[dir][type].index(last)]
|
144
|
+
# NOTICE: do not use append `<<` instead of `+=`
|
145
|
+
head += BASE32[NEIGHBORS[dir][parity].index(last)]
|
149
146
|
|
150
147
|
@@adjacent_cache[dir][geohash] = head
|
151
148
|
end
|
@@ -159,15 +156,7 @@ module_function
|
|
159
156
|
# @return {[String]} result geohashes of the walk
|
160
157
|
###
|
161
158
|
def walk(base, path)
|
162
|
-
|
163
|
-
|
164
|
-
h = base
|
165
|
-
|
166
|
-
path.each do |dir|
|
167
|
-
hashes << (h = adjacent(h, dir))
|
168
|
-
end
|
169
|
-
|
170
|
-
hashes
|
159
|
+
path.map { |dir| base = adjacent(base, dir) }
|
171
160
|
end
|
172
161
|
|
173
162
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: geohash_ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Yuki Iwanaga
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-09-
|
11
|
+
date: 2014-09-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -38,7 +38,7 @@ dependencies:
|
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '10.3'
|
41
|
-
description:
|
41
|
+
description: Geohash en/decode library written in ruby
|
42
42
|
email:
|
43
43
|
- yuki@creasty.com
|
44
44
|
executables: []
|
@@ -75,5 +75,5 @@ rubyforge_project:
|
|
75
75
|
rubygems_version: 2.2.2
|
76
76
|
signing_key:
|
77
77
|
specification_version: 4
|
78
|
-
summary:
|
78
|
+
summary: Geohash en/decode library written in ruby
|
79
79
|
test_files: []
|