PostGIS와 교차 라인을 결합


15

이것은 내가 거의 부끄러워하는 일이지만 내 삶에 효과가있는 것처럼 보이지는 않습니다.

세그먼트가있는 도로 레이어가 있으며 각 세그먼트에는 Road ID및 세그먼트가 type있습니다.

모든 세그먼트 Road ID를 하나의 선 스트링으로 결합하지만 동일 type하고 닿을 때만 (모든 선이 함께 스냅됩니다).

여기에 이미지 설명을 입력하십시오

Road ID - Type
   1       L
   1       L
   1       T
   1       L

답변:


11

아래 코드는 몇 가지 이유로 선택한 답변보다 약간 더 깨끗한 솔루션이라고 생각합니다. 먼저 테이블 조인이 필요하지 않으므로 각 거리 속성에 대해 'ON'절에 대한 부록이 필요하지 않으며, 두 번째는 위의 방법론에 여러 개의 연속되지 않은 거리 클러스터가있는 경우 여러 줄 문자열을 생성 할 수 있습니다. ST_Dump가이 솔루션에서 해당 문제를 처리하는 반면, 동일한 속성 값을 모두 사용합니다.

SELECT (ST_Dump(geom)).geom AS geom, "road_id", "road_type"
FROM (
    SELECT ST_LineMerge(ST_Union(geom)) AS geom, "road_id", "road_type"
    FROM "RoadCentreLines"
    GROUP BY "road_id", "road_type"
) AS street_union

내 지오메트리는 어느 쿼리와도 병합되지 않습니다
Luffydude

@Luffydude 더 많은 정보를 제공하기 위해 관심? 작업중인 형상이 병합 될 수 있도록 정렬되지 않았을 수 있습니다.
Grant Humphries

이것은 도로 ID를 기반으로 도로 데이터 세트를 병합하는 데 아름답게 작동했습니다. 이것은 틈이있는 도로를 아름답게 처리했습니다 (틈 부분에 선이 없음). 나는 OP가 아니지만 이것은 훌륭한 대답입니다. 이것은 정답입니다. 감사.
jbalk

이것이 가장 좋은 대답입니다!
aborruso

6

이것이 작동하는 것 같습니다

SELECT a."Road_ID",a."Road_Type", ST_LineMerge(ST_Collect(a.the_geom))
FROM "RoadCentreLines" as a 
LEFT JOIN "RoadCentreLines" as b ON 
ST_Touches(a.the_geom,b.the_geom) 
    AND a."Road_Type" = b."Road_Type" 
    AND a."Road_ID" = b."Road_ID"
GROUP BY ST_Touches(a.the_geom,b.the_geom), a."Road_Type", a."Road_ID"

0

그냥 침을 뱉지 만 몇 가지 다른 해결책을 생각할 수 있습니다. 나는 그들이 더 나은지 나쁜지 모르겠지만 단지 다른 사람이라는 것을 알았습니다.

먼저, 몇 가지 도로 유형 만있는 경우 다음과 같은 방법으로 유형별로 이동할 수 있습니다.

WITH type As (SELECT "Road_ID" As id WHERE "Road_Type" = 'type')
SELECT ST_LineMerge (ST_Collect(the_geom))
FROM "RoadCentreLines"
WHERE ST_StartPoint(the_geom) && ST_EndPoint(the_geom) IS TRUE
AND "Road_ID" IN (SELECT id FROM type);

많은 유형이있는 경우 FOR 루프에서 Road_Type을 변수로 사용하여 위의 대부분을 사용할 수도 있습니다.

내 마지막 생각은 모든 기하학을 병합 한 다음 ST_Line_Substring 함수 ( Link-Link ) 로 도로 유형을 호출하는 것과 관련이 있지만 전혀 작동하지 않습니다.

행운을 빈다, Rob

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.