2016-09-16 1 views
-1

У меня есть две модели: users и locations без соединения друг с другом, оба из них с latitude и longitude.Rails, Geocoder - получать записи рядом с другими записями и группами по второму набору записей

мне нужно запросить для всех users и все locations в пределах заданного радиуса каждого и группы их по locations

Практически, мне нужно набор результатов, группирует users, которые имеют один и тот же locations в пределах определенной радиус их

Там будет достаточно users, что было бы нецелесообразно, чтобы просто перебирать их, так что я ищу либо SQL или Rails способ выбора их

Я USI нг рельсов геокодера (https://github.com/alexreisner/geocoder)

ответ

0

Вопроса был downvoted, но я вывешу ответ я оказался на так или иначе

я должен был покончить с геокодером драгоценного камнем, так как она хорошо не играть с потрохами или выбирает и просто использует уравнение вручную, в конечном итоге использует:

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")