mongoid_spacial 0.2.0 → 0.2.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.
- data/README.md +11 -11
- data/VERSION +1 -1
- data/lib/mongoid_spacial/contexts/mongo.rb +4 -0
- data/lib/mongoid_spacial/criterion/near_spacial.rb +7 -5
- data/lib/mongoid_spacial/criterion/within_spacial.rb +4 -2
- data/lib/mongoid_spacial/spacial.rb +5 -1
- data/lib/mongoid_spacial/spacial/document.rb +3 -3
- data/mongoid_spacial.gemspec +2 -2
- metadata +3 -3
data/README.md
CHANGED
@@ -22,17 +22,15 @@ class River
|
|
22
22
|
field :length, type: Integer
|
23
23
|
field :average_discharge, type: Integer
|
24
24
|
field :source, type: Array, spacial: true
|
25
|
-
# if you want something besides the defaults {bit: 24, min: -180, max: 180} just set index to the options on the index
|
26
|
-
# field :source, type: Array, spacial: true
|
27
|
-
# try not set index for this field manually as we record what spacial fields are index for some handy fields later
|
28
25
|
|
29
26
|
# set return_array to true if you do not want a hash returned all the time
|
30
|
-
field :mouth, type: Array, spacial: {lat:
|
27
|
+
field :mouth, type: Array, spacial: {lat: :latitude, lng: :longitude, return_array: true }
|
31
28
|
|
32
29
|
# simplified spacial indexing
|
33
|
-
# you can only index one
|
30
|
+
# you can only index one point in mongodb version below 1.9
|
31
|
+
# if you want something besides the defaults {bit: 24, min: -180, max: 180} just set index to the options on the index
|
34
32
|
spacial_index :source
|
35
|
-
|
33
|
+
|
36
34
|
end
|
37
35
|
```
|
38
36
|
|
@@ -57,16 +55,18 @@ hudson = River.create(
|
|
57
55
|
# when setting array LONGITUDE MUST BE FIRST LATITUDE MUST BE SECOND
|
58
56
|
# source: [-73.935833,44.106667],
|
59
57
|
# but we can use hash in any order,
|
60
|
-
# the default keys for latitude and longitude are
|
61
|
-
source: {
|
62
|
-
|
63
|
-
mouth: {'latitude' => 40.703056, 'longitude' => -74.026667}
|
58
|
+
# the default keys for latitude and longitude are :lat and :lng respectively
|
59
|
+
source: {:lat => 44.106667, :lng => -73.935833},
|
60
|
+
mouth: {:latitude => 40.703056, :longitude => -74.026667}
|
64
61
|
)
|
65
62
|
|
66
63
|
# now to access this spacial information we can now do this
|
67
|
-
hudson.source #=> {
|
64
|
+
hudson.source #=> {:lng => -73.935833, :lat => 44.106667}
|
68
65
|
hudson.mouth #=> [-74.026667, 40.703056] # notice how this returned as a lng,lat array because return_array was true
|
69
66
|
# notice how the order of lng and lat were switched. it will always come out like this when using spacial.
|
67
|
+
# Also adds a handy distance function
|
68
|
+
hudson.distance_from(:source, [-74,40], :mi)
|
69
|
+
|
70
70
|
```
|
71
71
|
Mongoid Geo has extended all built in spacial symbol extentions
|
72
72
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.2.
|
1
|
+
0.2.2
|
@@ -42,6 +42,10 @@ module Mongoid #:nodoc:
|
|
42
42
|
opts[:unit] = (opts[:spherical]) ? unit : unit * Mongoid::Spacial::RAD_PER_DEG
|
43
43
|
end
|
44
44
|
|
45
|
+
if unit = Mongoid::Spacial.earth_radius[opts[:distance_multiplier]]
|
46
|
+
opts[:distance_multiplier] = (opts[:spherical]) ? unit : unit * Mongoid::Spacial::RAD_PER_DEG
|
47
|
+
end
|
48
|
+
|
45
49
|
opts[:distance_multiplier] = opts[:unit] if opts[:unit].kind_of?(Numeric)
|
46
50
|
|
47
51
|
# setup paging.
|
@@ -3,14 +3,14 @@ module Mongoid #:nodoc:
|
|
3
3
|
module Criterion #:nodoc:
|
4
4
|
|
5
5
|
# NearSpecial criterion is used when performing #near with symbols to get
|
6
|
-
# get a shorthand syntax for where clauses.
|
6
|
+
# get a shorthand syntax for where clauses.
|
7
7
|
#
|
8
8
|
# @example Conversion of a simple to complex criterion.
|
9
|
-
# { :field => { "$nearSphere" => => [20,30]}, '$maxDistance' => 5 }
|
9
|
+
# { :field => { "$nearSphere" => => [20,30]}, '$maxDistance' => 5 }
|
10
10
|
# becomes:
|
11
11
|
# { :field.near(:sphere) => {:point => [20,30], :max => 5, :unit => :km} }
|
12
12
|
class NearSpacial < Complex
|
13
|
-
|
13
|
+
|
14
14
|
# Convert input to query for near or nearSphere
|
15
15
|
#
|
16
16
|
# @example
|
@@ -23,8 +23,10 @@ module Mongoid #:nodoc:
|
|
23
23
|
v[:point] = v[:point].to_lng_lat if v[:point].respond_to?(:to_lng_lat)
|
24
24
|
query = {"$#{operator}" => v[:point] }
|
25
25
|
if v[:max]
|
26
|
-
unit = Mongoid::Spacial.earth_radius[v[:unit]]
|
27
|
-
|
26
|
+
if unit = Mongoid::Spacial.earth_radius[v[:unit]]
|
27
|
+
unit = (operator =~ /sphere/i) ? unit : unit * Mongoid::Spacial::RAD_PER_DEG
|
28
|
+
query['$maxDistance'] = v[:max]/unit
|
29
|
+
end
|
28
30
|
end
|
29
31
|
query
|
30
32
|
elsif v.kind_of? Array
|
@@ -32,8 +32,10 @@ module Mongoid #:nodoc:
|
|
32
32
|
if input[:point]
|
33
33
|
input[:point] = input[:point].to_lng_lat if input[:point].respond_to?(:to_lng_lat)
|
34
34
|
if input[:max]
|
35
|
-
unit = Mongoid::Spacial.earth_radius[input[:unit]]
|
36
|
-
|
35
|
+
if unit = Mongoid::Spacial.earth_radius[input[:unit]]
|
36
|
+
unit = (operator =~ /sphere/i) ? unit : unit * Mongoid::Spacial::RAD_PER_DEG
|
37
|
+
input[:max] = input[:max]/unit
|
38
|
+
end
|
37
39
|
input = [input[:point],input[:max]]
|
38
40
|
else
|
39
41
|
input = input[:point]
|
@@ -20,7 +20,11 @@ module Mongoid
|
|
20
20
|
LAT_SYMBOLS = [:y, :lat, :latitude]
|
21
21
|
|
22
22
|
def self.distance(p1,p2,unit = nil, formula = nil)
|
23
|
-
formula ||=
|
23
|
+
formula ||= @@distance_formula
|
24
|
+
|
25
|
+
p1 = p1.to_lng_lat if p1.respond_to?(:to_lng_lat)
|
26
|
+
p1 = p1.to_lng_lat if p1.respond_to?(:to_lng_lat)
|
27
|
+
|
24
28
|
unit = earth_radius[unit] if unit.kind_of?(Symbol) && earth_radius[unit]
|
25
29
|
rads = Formulas.send(formula, p1, p2)
|
26
30
|
(unit.kind_of?(Numeric)) ? unit*rads : rads
|
@@ -21,9 +21,9 @@ module Mongoid
|
|
21
21
|
end
|
22
22
|
|
23
23
|
module InstanceMethods #:nodoc:
|
24
|
-
def distance_from(key,
|
25
|
-
|
26
|
-
Mongoid::Spacial.distance(
|
24
|
+
def distance_from(key,p2, unit = nil, formula = nil)
|
25
|
+
p1 = res.send(key)
|
26
|
+
Mongoid::Spacial.distance(p1, p2, unit, formula = nil)
|
27
27
|
end
|
28
28
|
end
|
29
29
|
end
|
data/mongoid_spacial.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{mongoid_spacial}
|
8
|
-
s.version = "0.2.
|
8
|
+
s.version = "0.2.2"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = [%q{Ryan Ong}]
|
12
|
-
s.date = %q{2011-06-
|
12
|
+
s.date = %q{2011-06-24}
|
13
13
|
s.description = %q{A Mongoid Extention that simplifies and adds support for MongoDB Geo Spacial Calculations.}
|
14
14
|
s.email = %q{ryanong@gmail.com}
|
15
15
|
s.extra_rdoc_files = [
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: mongoid_spacial
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.2.
|
5
|
+
version: 0.2.2
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Ryan Ong
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2011-06-
|
13
|
+
date: 2011-06-24 00:00:00 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: mongoid
|
@@ -262,7 +262,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
262
262
|
requirements:
|
263
263
|
- - ">="
|
264
264
|
- !ruby/object:Gem::Version
|
265
|
-
hash: -
|
265
|
+
hash: -35115700109095116
|
266
266
|
segments:
|
267
267
|
- 0
|
268
268
|
version: "0"
|