쿼리에 어려움이 있습니다. 각각 n_type 열에 값이있는 줄 문자열 네트워크가 있습니다. 이것은 몇 가지 옵션 중 하나 일 수 있습니다. 동일한 유형의 연속 줄을 구성하는 모든 줄 문자열을 그룹화하는 새 테이블을 생성하고 싶습니다.
전에:
후:
여기 내가 지금까지 얻은 것입니다. 결과를 반환하지만 의미가 없습니다. 유형이 일치하지 않으며 너무 많은 기능을 반환합니다.
또한 "연속"을 이웃에서 5 피트 이내의 선으로 정의하고 30도 미만의 각도에서 만나는 것에 유의하십시오.
WITH RECURSIVE all_links (i, pk_uid, n_type, geom) AS (
SELECT 1 AS i,
pk_uid,
n_type,
geom
FROM network
WHERE n_type != 'none'
UNION ALL
SELECT a.i + 1,
b.pk_uid,
b.n_type,
b.geom
FROM network b, all_links a
WHERE b.n_type = a.n_type
AND b.geom <#> a.geom <= 5 --lines are continuous if within 5 feet of neighbor
AND ABS( DEGREES( 3*pi() - st_azimuth(st_startpoint(a.geom),st_endpoint(a.geom)) + st_azimuth(st_startpoint(b.geom),st_endpoint(b.geom)))::int % 360 - 180) <= 30 ) --only take links within 30 degrees of the same angle
SELECT i, n_type, ST_Union(the_geom) FROM all_links GROUP BY i, n_type
나는 재귀 쿼리가 갈 길이라고 가정했지만 그에 대해 잘못 판명되어 기쁩니다. 재귀는 조금 어려워합니다.
편집 : 나는 이미 ST_Union과 ST_Linemerge를 사용하여 집계 한 다음 결과를 덤핑했다고 덧붙여 야합니다. 이 기능은 작동하지만> 30도 교차점을 고려하지 않으며 연결에 대한 5 피트 허용 오차도 존중할 수 없습니다.
@MickyT 감사합니다. 마지막 SELECT 절에서 통합을 수행 할 수 있지만 당분간 선택한 모든 결과를 볼 수 있도록 *를 선택했음을 언급해야합니다. 코드 스 니펫을 수정하여 최종 모습을 보여 드리겠습니다.
—
spencerrecneps
재귀 쿼리는 이해하기 어렵습니다. Lol and +1
—
John Powell
간략히 살펴보면 기본 / 앵커 쿼리에 문제가있을 수 있습니다. 각 라인 A, B, C 등의 시작점을 선택해야하며, 그런 다음 재귀 부분에 쌓입니다. 아마도 앵커 쿼리에 일종의 순서를 추가해야 할 수도 있습니다 (아마도 x 또는 y 방향으로-데이터를 보지 않고 알 수 없음). 나는 이것을 분해하고 재귀 부분을 계속하기 전에 합리적인 시작점을 먼저 얻었는지 확인합니다. 나는 최근에 시계열에서 줄무늬를 찾기 위해 재귀 쿼리를 사용했으며 일단 앵커 포인트가 올바르게 식별되면 나머지는 쉬웠습니다.
—
John Powell
@dbaston. 좋은 지적이지만 재귀 쿼리 로이 작업을 수행 할 수 있지만 모든 사람이 아직 설치하지는 않았습니다.
—
존 파월
a.pk_uid != b.pk_uid