답변:
아래 코드는 몇 가지 이유로 선택한 답변보다 약간 더 깨끗한 솔루션이라고 생각합니다. 먼저 테이블 조인이 필요하지 않으므로 각 거리 속성에 대해 '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
이것이 작동하는 것 같습니다
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"
그냥 침을 뱉지 만 몇 가지 다른 해결책을 생각할 수 있습니다. 나는 그들이 더 나은지 나쁜지 모르겠지만 단지 다른 사람이라는 것을 알았습니다.
먼저, 몇 가지 도로 유형 만있는 경우 다음과 같은 방법으로 유형별로 이동할 수 있습니다.
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