2014-07-05 2 views
1

나는 사용자의 위도 & 경도 값을 기반으로 공급 업체를 가져오고 싶습니다. Geolocation 기반의 개인 프로젝트에서 작업하고 있습니다. 그리고 공급 업체는 공급 범위가 다양하기 때문에 반경이 5km 이내 인 공급 업체는 거의 없으며 도시 전체에 공급할 수있는 공급 업체는 거의 없습니다.도시를 구역으로 나누는 것은 좋은 생각입니까?

일반적인 방법은 공급자별로 사용자가 & 사이의 거리를 계산하는 것입니다. 공급 반지름보다 작거나 같으면 해당 공급 업체를 결과에 표시하십시오.

하지만 이것은 매우 느리게 수 있습니다, 그래서 내가 공급 업체가 추가 될 때마다 내가 할거야 & 네 개의 영역 (노스 이스트 웨스트 사우스 위해 구글 맵에서 4 개 위도 & 경도 값을 선택)으로 도시를 분할 줄 알았는데 수학 &은 데이터베이스에서 제공 할 수있는 영역을 할당합니다. 이제는 사용자의 위도가 & 경도가 될 때마다 해당 지역에 공급할 수있는 & 가져 오기 공급 업체를 결정하고 거리 계산을 수행하여 &을 필터링합니다. 이렇게하면 전체 목록 대신 공급 업체 수가 줄어들어 계산이 수행됩니다.

하지만 좋은 생각입니까, 아니면 더 잘할 수 있습니까?

+0

어떤 데이터베이스를 사용하고 있습니까? 이것은 공간 인덱스가 2 차원 (R 트리 사용)이기 때문에 공간 인덱스가 뛰어나며 포함, 포함, 교차, 거리 유형 쿼리를 활성화합니다. –

+0

postgres를 사용하려고합니다 –

+0

그 경우에는 공간 인덱스를 사용한 다음 ST_DWithin (geom1, geom2, distance) 유형 쿼리를 사용하십시오. http://postgis.net/docs/ST_DWithin.html –

답변

1

Postgres/Postgis를 사용하는 경우 spatial indexes을 사용한 다음 ST_DWithin (geom1, geom2, distance) 유형 쿼리를 사용하면 ST_DWithin docs을 참조하십시오. 공간 인덱스는 공간을 분할하여 이러한 종류의 쿼리를 매우 효율적으로 만들고 자신의 공간 분할 스키마를 생각해야하는 번거 로움을 피할 수 있습니다.

또 다른 연산자는 공간 인덱스가 매우 효율적이며 order by 절에 사용되어 어떤 점 x에 가장 가까운 y 값을 가져옵니다 (k 가장 가까운 이웃 검색).연산자를 사용할 수 있습니다. <-> operator docs.이 연산자가 색인을 사용하여 올바르게 작동하는 한 가지주의 사항, 검색하려는 점이 상수 일 필요가 있습니다.

+0

대단히 감사합니다. –