gpt4 book ai didi

ruby-on-rails - Geokit Rails 距离和查找(:all)

转载 作者:行者123 更新时间:2023-12-04 06:08:00 26 4
gpt4 key购买 nike

我有两个关于 gem 'geokit-rails' 的问题

这是我的示例代码

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

    sample 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
  • 距离。我真的不明白这是如何工作的。我们应该在 socket 模型中添加距离列吗?如果是,列类型是什么?是否可以根据给定的 lat lng 返回具有距离值的记录? Outlet.by_distance(:origin =>[32.951613, -96.958444])它将返回与该点距离的记录。 (2kms, 3kms, 4km, ...)
  • 最佳答案

  • find是一个 ActiveRecord 方法。 与 Geokit 无关 .它需要模型 id1您创建的第一个 Outlet 或 2对于第二个奥特莱斯。您使用过 Outlet.find(:all)因此,ActiveRecord 提示它找不到任何 ID 为 all 的 Outlet。 .

    我想你真正想做的是
    Outlet.within(10, :origin => [32.951613,-96.958444])

    请注意,您还可以为 origin 传递一个对象,例如,
    @the_latest_outlet = Outlet.last
    @outlets_nearby_the_latest_outlet = Outlet.within(10, origin: @the_latest_outlet)
  • 不,您不必添加列。领域distance自动添加到 ActiveRecord 实例。我仍然没有发现参数 :distance_field_name 的任何用途.我最好的猜测是,如果您的模型有一个名为 distance 的字段,你应该使用 distance_field_name参数以避免冲突。

    2.1.如果你想测量两点之间的距离,你需要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)
  • 关于ruby-on-rails - Geokit Rails 距离和查找(:all),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34283765/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com