PostGIS를 사용하여 가장 가까운 다각형 이웃을 계산하고 있습니다. 내가 계산하고 싶은 것은 각 다각형에서 가장 가까운 다각형까지의 최소 거리입니다.
지금까지 나는 Mike Toews의 대답 (작은 변화로 인용) 에서 큰 도움을 얻었습니다 .
SELECT
a.hgt AS a_hgt,
b.hgt AS b_hgt,
ST_Distance(a.the_geom, b.the_geom) AS distance_between_a_and_b
FROM
public."TestArea" AS a, public."TestArea" AS b
WHERE
a.hgt != b.hgt AND ST_Distance(a.the_geom, b.the_geom) < 400
그런 다음 최소값을 계산했습니다.
SELECT a_hgt, MIN(distance_between_a_and_b)
FROM public."lon_TestArea"
GROUP BY a_hgt
그러나 내 도전은 많은 수의 다각형 (1,000,000)에 대해 이것을 계산하는 것입니다. 위의 계산에서 각 다각형을 다른 다각형과 비교할 때 10 ^ 12 계산을 수행 할 필요가 없도록 계산을 개선 할 수있는 방법이 궁금했습니다.
한 가지 생각은 각 다각형을 버퍼링 한 다음 해당 다각형에 대한 버퍼 내의 모든 값의 가장 가까운 이웃을 계산하고 최소값을 기록하는 것이라고 생각했습니다. 이것이 최선의 방법인지 또는 PostGIS에 사용해야하는 기능이 있는지 확실하지 않습니다.
편집 : Nicklas의 제안 중 하나를 사용하여 실험하고 있습니다 ST_Dwithin()
.
CREATE TABLE mytable_withinRange AS SELECT
a.hgt AS a_hgt,
b.hgt AS b_hgt,
ST_DWithin(a.the_geom, b.the_geom, 400)
FROM
public."lon_TestArea" AS a, public."lon_TestArea" AS b
각 다각형의 ID와 특정 거리 내에 있는지 여부에 대한 표를 반환합니다. IF/ELSE
SQL을 사용하여 형식 문 을 구성 할 수 있습니까? ( CASE
조건 사용에 대해 읽었습니다. ) 또는 생성 한 테이블을 원래 테이블에 조인 한 다음 ST_Distance를 사용하여 쿼리를 다시 실행해야합니까?