gpt4 book ai didi

ruby-on-rails - Geokit Rails - 查找在其范围内包含点(位置)的所有用户

转载 作者:行者123 更新时间:2023-12-01 01:04:32 24 4
gpt4 key购买 nike

试图了解我如何使用 Geokit Rails 来获取覆盖范围内某个点的所有用户。

例如,用户 A、B、C 和 D 的半径为 i > 0 km。现在假设我想找到所有用户,他们覆盖了用 lat 和 lng 创建的 map 上的选定点。所以当我想查找范围内的所有记录时,这不是问题 , 就是这种情况我想 查找在其范围内包含我的位置的所有记录 .

从图像:应该返回用户 A、B、C 而不是 D,因为红点不在他的范围内。

我尝试过的:我从上到下查看了文档,搜索了示例,但都导致在一个范围内找到记录,所以这不是我的情况。如果有人有同样的事情要解决,请分享。谢谢你。

graphic description of the problem

最佳答案

我目前有效的解决方案可能不是最好的解决方案,只是找不到其他解决方案:

  address = [lat, long]
users.each do |u|
if u.distance_to(address, :units => :kms) < u.distance
tutors << t
end
end

工作原理 :
用户表有一个名为 distance 的字段,我保留一个整数,显示用户覆盖的半径是多少,例如:20。
在进行搜索时,我从表单发送经纬度参数以在 map 上查找位置,然后循环遍历用户以查找他们与该点之间的距离小于距离值的所有用户。

例如:用户 1 的范围为 20 公里,因此距离值为 20,然后检查用户 1 与 map 上点之间的距离是否小于 20 将其加载到数组中。

我不需要太多的用户循环,因为我限制了他们在这之前的代码中的数量,所以我只得到其中的几个......在 1 到 40 之间。

现在它有效,如果有人有更好的解决方案,请分享。

更好的解决方案:
  def find_tutors
lat_d = Geokit::Mappable::LATITUDE_DEGREES
km_lat = Geokit::Mappable::KMS_PER_LATITUDE_DEGREE
kms_per_mile = Geokit::Mappable::KMS_PER_MILE

users = User.joins(:courses).where("courses.lesson ILIKE ?", "%#{lesson}%")

if long.present?
users = users.where("pow((longitude - ?) * (#{lat_d} * #{kms_per_mile} * abs(cos(0.0174 * longitude))), 2) +
pow((latitude - ?) * #{km_lat}, 2) < pow(distance, 2)",
long, lat)
end

users
end

在上述情况下 longitudelatitude是搜索模型的属性,但也可以是任何其他属性。

关于ruby-on-rails - Geokit Rails - 查找在其范围内包含点(位置)的所有用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19934175/

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