Module: Mongoid::Geospatial

Extended by:
ActiveSupport::Concern
Defined in:
lib/mongoid_geospatial/version.rb,
lib/mongoid_geospatial/fields/box.rb,
lib/mongoid_geospatial/geospatial.rb,
lib/mongoid_geospatial/fields/line.rb,
lib/mongoid_geospatial/fields/point.rb,
lib/mongoid_geospatial/helpers/core.rb,
lib/mongoid_geospatial/fields/circle.rb,
lib/mongoid_geospatial/wrappers/rgeo.rb,
lib/mongoid_geospatial/fields/polygon.rb,
lib/mongoid_geospatial/wrappers/georuby.rb,
lib/mongoid_geospatial/fields/geometry_field.rb

Defined Under Namespace

Modules: ClassMethods Classes: Box, Circle, GeometryField, Line, Point, Polygon

Constant Summary collapse

VERSION =
"3.0.0"
LNG_SYMBOLS =
[:x, :lon, :long, :lng, :longitude, 'x', 'lon', 'long', 'longitude']
LAT_SYMBOLS =
[:y, :lat, :latitude, 'y', 'lat', 'latitude']
EARTH_RADIUS_KM =

taken directly from mongodb

6371
RAD_PER_DEG =
Math::PI / 180
EARTH_RADIUS =
{
  :km => EARTH_RADIUS_KM,
  :m  => EARTH_RADIUS_KM * 1000,
  :mi => EARTH_RADIUS_KM * 0.621371192, # taken directly from mongodb
  :ft => EARTH_RADIUS_KM * 5280*0.621371192,
  :sm => EARTH_RADIUS_KM * 0.53995680345572 # sea mile
}
@@lng_symbols =
LNG_SYMBOLS.dup
@@lat_symbols =
LAT_SYMBOLS.dup
@@earth_radius =
EARTH_RADIUS.dup

Class Method Summary collapse

Class Method Details

.from_array(ary) ⇒ Object



4
5
6
# File 'lib/mongoid_geospatial/helpers/core.rb', line 4

def self.from_array(ary)
  ary[0..1].map(&:to_f)
end

.from_hash(hsh) ⇒ Object



8
9
10
11
# File 'lib/mongoid_geospatial/helpers/core.rb', line 8

def self.from_hash(hsh)
  raise "Hash must have at least 2 items" if hsh.size < 2
  [from_hash_x(hsh), from_hash_y(hsh)]
end

.from_hash_x(hsh) ⇒ Object



21
22
23
24
25
26
# File 'lib/mongoid_geospatial/helpers/core.rb', line 21

def self.from_hash_x(hsh)
  v = (Mongoid::Geospatial.lng_symbols & hsh.keys).first
  return hsh[v].to_f if !v.nil? && hsh[v]
  fail "Hash cannot contain #{Mongoid::Geospatial.lat_symbols.inspect} as the first item if there is no #{Mongoid::Geospatial.lng_symbols.inspect}" if Mongoid::Geospatial.lat_symbols.index(keys[0])
  values[0].to_f
end

.from_hash_y(hsh) ⇒ Object



13
14
15
16
17
18
19
# File 'lib/mongoid_geospatial/helpers/core.rb', line 13

def self.from_hash_y(hsh)
  v = (Mongoid::Geospatial.lat_symbols & hsh.keys).first
  return hsh[v].to_f if !v.nil? && hsh[v]
  fail "Hash must contain #{Mongoid::Geospatial.lat_symbols.inspect} if ruby version is less than 1.9" if RUBY_VERSION.to_f < 1.9
  fail "Hash cannot contain #{Mongoid::Geospatial.lng_symbols.inspect} as the second item if there is no #{Mongoid::Geospatial.lat_symbols.inspect}" if Mongoid::Geospatial.lng_symbols.index(hsh.keys[1])
  hsh.values[1].to_f
end

.with_georuby!Object



39
40
41
# File 'lib/mongoid_geospatial/geospatial.rb', line 39

def self.with_georuby!
  require 'mongoid_geospatial/wrappers/georuby'
end

.with_rgeo!Object



35
36
37
# File 'lib/mongoid_geospatial/geospatial.rb', line 35

def self.with_rgeo!
  require 'mongoid_geospatial/wrappers/rgeo'
end