지도상의 2 차원 데이터 포인트로 가득 찬 데이터베이스가 있습니다. 각 레코드에는 기하학 유형 필드가 있습니다. 내가 할 수 있어야 할 점은 k 가장 가까운 점을 반환하는 저장 프로 시저에 포인트를 전달하는 것입니다 (k는 sproc에도 전달되지만 쉽습니다). http://blogs.msdn.com/isaac/archive/2008/10/23/nearest-neighbors.aspx에서 하나의 가장 가까운 이웃을 얻었습니다.하지만 이웃을 가장 가까운 이웃 k으로 확장하는 방법을 알 수 없습니다.k 인접 노드를 찾기 위해이 SQL 쿼리를 어떻게 확장 할 수 있습니까?
DECLARE @start FLOAT = 1000;
WITH NearestPoints AS
(
SELECT TOP(1) WITH TIES *, T.g.STDistance(@x) AS dist
FROM Numbers JOIN T WITH(INDEX(spatial_index))
ON T.g.STDistance(@x) < @start*POWER(2,Numbers.n)
ORDER BY n
)
SELECT TOP(1) * FROM NearestPoints
ORDER BY n, dist
내측에게 -
이 현재 쿼리이다 T
테이블이다 g
지오메트리 필드이다 @x
는 점 Numbers
1 N에 정수를 표이다 주변 검색 할 쿼리는 가장 가까운 비어 있지 않은 영역을 선택하고 외부 쿼리는 그 영역에서 가장 높은 결과를 선택합니다. 외부 쿼리는 (예 : SELECT TOP(20)
) 쉽게 변경할 수 있지만 가장 가까운 영역에 하나의 결과 만 포함되어 있으면 그 문제가 해결됩니다.
나는 k 레코드를 포함하는 첫 번째 영역을 재귀 적으로 검색해야하지만, 테이블 변수를 사용하지 않고 (테이블 구조를 생성해야하므로 유지 보수 문제가 발생할 수 있습니다. 많은 분야에서), 나는 어떻게 볼 수 없다.
k 레코드를 찾을 때 INNER 쿼리를 TOP (1) 이상으로 변경하면 어떤 영향이 있습니까?(가장 가까운 영역에 하나의 결과 만 포함 된 경우) – kevchadders
더 많은 영역을 선택하도록 내부 쿼리를 변경하면 더 많은 결과를 얻을 수 있지만 더 많은 결과를 보장하지는 않습니다. 다른 영역에는 동일한 단일 결과가 포함될 수 있습니다 크기가 기하 급수적으로) - eg 근처에 한 점이 있지만 주변에 수백 킬로미터가없는 점을 검색하면 첫 번째 _n_ 영역에는 같은 1 점이 포함됩니다. – Smigs
이것에 대한 작업 솔루션이 있습니까? 나는 같은 해결책을 찾고있다. –