2016-09-16 3 views
-1

userslocations 두 모델은 서로 연결되어 있지 않으며 두 모델 모두 latitudelongitude 열입니다.레일즈, 지오 코더 - 다른 레코드 근처에 레코드를 얻고 두 번째 레코드 세트로 그룹화하십시오.

내가 실질적으로 locations

에 의해 주어진 각각의 반경 및 그룹을 내 모든 users 모든 locations를 조회 할 필요가 나는 결과의 집합을 필요로하는 그룹 일정 내에서 같은 locations이있는 users 그 반경이

그것을 단순히 반복하는 것이 비현실적이 될 것이라고 충분히 users이있을 것이다, 그래서 나는 그들에게

을 선택하는 SQL 또는 레일 방법 중 하나를 찾고 있어요 나는 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")