簡體   English   中英

Geokit Rails距離並找到(:全部)

[英]Geokit Rails distance and find(:all)

我有兩個關於gem 'geokit-rails'

這是我的示例代碼

class Outlet < ActiveRecord::Base
  acts_as_mappable :lat_column_name => :address_latitude,
                   :lng_column_name => :address_longitude,
                   :default_units => :kms
end            
  1. 我不能使用find(:all)

    示例Outlet.find(:all, :origin =>[32.951613,-96.958444], :within=>10)它返回ActiveRecord::RecordNotFound: Couldn't find all Outlets with 'id': (all, {:origin=>[32.951613, -96.958444], :within=>10})

    我也測試了這個查詢Outlet.find(:all)它返回ActiveRecord::RecordNotFound: Couldn't find Outlet with 'id'=all

  2. 距離。 我真的不明白這是如何工作的。 我們應該在插座模型中添加距離列嗎? 如果是,那么列類型是什么? 並且可以根據給定的lat lng返回帶有距離值的記錄嗎? Outlet.by_distance(:origin =>[32.951613, -96.958444])它將返回與該點距離的記錄。 (2公里,3公里,4公里......)

  1. find是一個ActiveRecord方法。 它與Geokit無關 它為您創建的第一個Outlet或第二個Outlet的2個模型id例如1 你使用Outlet.find(:all)所以,ActiveRecord抱怨它找不到任何id為all Outlet。

    我想你真正想做的是

     Outlet.within(10, :origin => [32.951613,-96.958444]) 

    請注意,您也可以傳遞對象作為原點,例如,

     @the_latest_outlet = Outlet.last @outlets_nearby_the_latest_outlet = Outlet.within(10, origin: @the_latest_outlet) 
  2. 不,您不必添加列。 字段distance自動添加到ActiveRecord實例。 我還沒有找到任何使用參數:distance_field_name 我最好的猜測是,如果你的模型有一個名為distance的字段,你應該使用distance_field_name參數來避免沖突。

    2.1。 如果要測量2點之間的距離,則需要distance_to作為此示例:

     a = Outlet.find(1) b = Outlet.find(2) distance_from_a_to_b = a.distance_to(b) 

    2.2。 by_distance是按距離排序所有實例。

     a_place_to_compare = [lat, lng] all_outlets_sorted_by_distance_from_the_place = Outlet.by_distance(a_place_to_compare) 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM