Skip to content
Snippets Groups Projects
Commit ed10f782 authored by Alex Reisner's avatar Alex Reisner
Browse files

Merge two methods into one.

Reduces code duplication.
parent 34021a68
No related branches found
No related tags found
No related merge requests found
...@@ -98,10 +98,22 @@ module Geocoder::Store ...@@ -98,10 +98,22 @@ module Geocoder::Store
# * +:exclude+ - an object to exclude (used by the +nearbys+ method) # * +:exclude+ - an object to exclude (used by the +nearbys+ method)
# #
def near_scope_options(latitude, longitude, radius = 20, options = {}) def near_scope_options(latitude, longitude, radius = 20, options = {})
method_prefix = using_sqlite? ? "approx" : "full" options[:units] ||= (geocoder_options[:units] || Geocoder::Configuration.units)
send( bearing = bearing_from_sql_options(latitude, longitude, options)
method_prefix + "_near_scope_options", distance = distance_from_sql_options(latitude, longitude, options)
latitude, longitude, radius, options if using_sqlite?
b = Geocoder::Calculations.bounding_box([latitude, longitude], radius, options)
args = b + [
full_column_name(geocoder_options[:latitude]),
full_column_name(geocoder_options[:longitude])
]
conditions = Geocoder::Sql.within_bounding_box(*args)
else
conditions = ["#{distance} <= ?", radius]
end
default_near_scope_options(latitude, longitude, radius, options).merge(
:select => select_clause(options[:select], distance, bearing),
:conditions => add_exclude_condition(conditions, options[:exclude])
) )
end end
...@@ -132,47 +144,6 @@ module Geocoder::Store ...@@ -132,47 +144,6 @@ module Geocoder::Store
end end
end end
##
# Scope options hash for use with a database that supports POWER(),
# SQRT(), PI(), and trigonometric functions SIN(), COS(), ASIN(),
# ATAN2(), DEGREES(), and RADIANS().
#
def full_near_scope_options(latitude, longitude, radius, options)
options[:units] ||= (geocoder_options[:units] || Geocoder::Configuration.units)
bearing = bearing_from_sql_options(latitude, longitude, options)
distance = distance_from_sql_options(latitude, longitude, options)
conditions = ["#{distance} <= ?", radius]
default_near_scope_options(latitude, longitude, radius, options).merge(
:select => select_clause(options[:select], distance, bearing),
:conditions => add_exclude_condition(conditions, options[:exclude])
)
end
##
# Scope options hash for use with a database without trigonometric
# functions, like SQLite. Approach is to find objects within a square
# rather than a circle, so results are very approximate (will include
# objects outside the given radius).
#
# Distance and bearing calculations are *extremely inaccurate*. They
# only exist for interface consistency--not intended for production!
#
def approx_near_scope_options(latitude, longitude, radius, options)
options[:units] ||= (geocoder_options[:units] || Geocoder::Configuration.units)
bearing = bearing_from_sql_options(latitude, longitude, options)
distance = distance_from_sql_options(latitude, longitude, options)
b = Geocoder::Calculations.bounding_box([latitude, longitude], radius, options)
args = b + [
full_column_name(geocoder_options[:latitude]),
full_column_name(geocoder_options[:longitude])
]
conditions = Geocoder::Sql.within_bounding_box(*args)
default_near_scope_options(latitude, longitude, radius, options).merge(
:select => select_clause(options[:select], distance, bearing),
:conditions => add_exclude_condition(conditions, options[:exclude])
)
end
## ##
# Generate the SELECT clause. # Generate the SELECT clause.
# #
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment