Rails, Geocoder - 获取靠近其他记录的记录并按第二组记录分组

Rails, Geocoder - get records near other records and group by the second set of records

我有两个模型,userslocations 彼此没有联系,它们都有 latitudelongitude 列。

我需要查询给定半径内的所有 users 和所有 locations,并按 locations

对它们进行分组

实际上,我需要一组结果,将具有相同 locationsusers 分组到

的特定半径范围内

将有足够多的 users 简单地迭代它们是不切实际的,所以我正在寻找 SQL 或 Rails 选择它们的方法

我正在使用 rails 地理编码器 (https://github.com/alexreisner/geocoder)

问题被否决了,但我会post我最终得到的答案

我不得不放弃地理编码器 gem,因为它不能很好地处理 plucks 或 selects,只能手动使用等式,最终使用:

User.select("ARRAY_AGG(users.id) as user_list, (SELECT array(SELECT locations.id from locations WHERE (6371.0 * 2 * ASIN(SQRT(POWER(SIN((users.latitude - locations.latitude) * PI() / 180 / 2), 2) + COS(users.latitude * PI() / 180) * COS(locations.latitude * PI() / 180) * POWER(SIN((users.longitude - locations.longitude) * PI() / 180 / 2), 2)))) <= CAST(<whatever radius> AS float))) as location_list").group("location_list")