回答:
以下のコードは、いくつかの理由で選択された答えよりも少しきれいなソリューションだと思います。最初にテーブル結合が不要であるため、各ストリート属性に '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)を使用して道路タイプを呼び出すことでしたが、まったく機能しません。
頑張って、ロブ