Class: FacilitiesQuery::BoundingBoxQuery
- Defined in:
- app/models/facilities_query/bounding_box_query.rb
Instance Attribute Summary
Attributes inherited from Base
Instance Method Summary collapse
- #build_result_set(bbox_num, type, services) ⇒ Object
-
#dist_from_center(bbox) ⇒ Object
Naive distance calculation, but accurate enough for map display sorting.
- #run ⇒ Object
Methods inherited from Base
#get_facility_data, #ids_for_types, #initialize, #service_condition
Constructor Details
This class inherits a constructor from FacilitiesQuery::Base
Instance Method Details
#build_result_set(bbox_num, type, services) ⇒ Object
20 21 22 23 24 25 |
# File 'app/models/facilities_query/bounding_box_query.rb', line 20 def build_result_set(bbox_num, type, services) lats = bbox_num.values_at(1, 3) longs = bbox_num.values_at(2, 0) conditions = { lat: (lats.min..lats.max), long: (longs.min..longs.max) } BaseFacility::TYPES.flat_map { |facility_type| get_facility_data(conditions, type, facility_type, services) } end |
#dist_from_center(bbox) ⇒ Object
Naive distance calculation, but accurate enough for map display sorting. If greater precision is ever needed, use Haversine formula.
12 13 14 15 16 17 18 |
# File 'app/models/facilities_query/bounding_box_query.rb', line 12 def dist_from_center(bbox) lambda do |facility| center_x = (bbox[0] + bbox[2]) / 2.0 center_y = (bbox[1] + bbox[3]) / 2.0 Math.sqrt((facility.long - center_x)**2 + (facility.lat - center_y)**2) end end |
#run ⇒ Object
5 6 7 8 |
# File 'app/models/facilities_query/bounding_box_query.rb', line 5 def run bbox_num = @params[:bbox].map { |x| Float(x) } build_result_set(bbox_num, @params[:type], @params[:services]).sort_by(&(dist_from_center bbox_num)) end |