Module: Mongoid::Spacial
- Defined in:
- lib/mongoid_spacial/spacial.rb,
lib/mongoid_spacial/spacial/version.rb,
lib/mongoid_spacial/spacial/document.rb,
lib/mongoid_spacial/spacial/formulas.rb,
lib/mongoid_spacial/spacial/geo_near_results.rb
Defined Under Namespace
Modules: Document, Formulas Classes: GeoNearResults
Constant Summary collapse
- EARTH_RADIUS_KM =
taken directly from mongodb
6371
- 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, }
- RAD_PER_DEG =
Math::PI/180
- LNG_SYMBOLS =
[:x, :lon, :long, :lng, :longitude]
- LAT_SYMBOLS =
[:y, :lat, :latitude]
- VERSION =
"0.2.16"
- @@lng_symbols =
LNG_SYMBOLS.dup
- @@lat_symbols =
LAT_SYMBOLS.dup
- @@earth_radius =
EARTH_RADIUS.dup
- @@paginator =
:array
- @@default_per_page =
25
- @@spherical_distance_formula =
:n_vector
Class Method Summary collapse
Class Method Details
.distance(p1, p2, opts = {}) ⇒ Object
22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
# File 'lib/mongoid_spacial/spacial.rb', line 22 def self.distance(p1,p2,opts = {}) opts[:formula] ||= (opts[:spherical]) ? @@spherical_distance_formula : :pythagorean_theorem p1 = p1.to_lng_lat if p1.respond_to?(:to_lng_lat) p2 = p2.to_lng_lat if p2.respond_to?(:to_lng_lat) rads = Formulas.send(opts[:formula], p1, p2) if unit = earth_radius[opts[:unit]] opts[:unit] = (rads.instance_variable_get("@radian")) ? unit : unit * RAD_PER_DEG end rads *= opts[:unit].to_f if opts[:unit] rads end |