名前

ST_ClusterRelateWin — ジオメトリーが接続するかどうかを判定する空間関係パターンを使って、入力ジオメトリーを接続されたジオメトリ集合にクラスタリングして、クラスター識別子を返すウィンドウ関数です。

概要

integer ST_ClusterRelateWin(geometry winset geom, text relate_matrix);

説明

交差するジオメトリの接続されたクラスターを構築するウィンドウ関数です。ジオメトリーは、クラスターの他のメンバーとのDE9IM空間関係行列が対で合致する場合には、クラスターに追加されます。この関数によって、境界同士が接触するすべてのオブジェクトのクラスターを構築できますが、単にオーバーラップするものは除外されます。

Availability: 3.7.0

このラインストリングのコレクションは ST_ClusterIntersectingWinを使って単一のクラスターを形成しますが、 ST_ClusterRelateWinを使うと、端点でのみ接続する三つのグループにクラスタリングできます。

Code
WITH data(id, geom) AS (
  VALUES (1, 'LINESTRING(0 0,1 1)'::geometry),
         (2, 'LINESTRING(2 2,1 1)'::geometry),
         (3, 'LINESTRING(0 1,1 0)'::geometry),
         (4, 'LINESTRING(0 1,0 4)'::geometry),
         (5, 'LINESTRING(2 2,2 4)'::geometry),
         (6, 'LINESTRING(1.5 2.5,2.5 3.5)'::geometry)
), clustered AS (
  SELECT id, geom,
         ST_ClusterRelateWin(geom, '****0****') OVER () AS cluster
  FROM data
)
SELECT cluster,
       string_agg(id::text, ',' ORDER BY id) AS members,
       ST_Collect(geom ORDER BY id) AS cluster_geom
FROM clustered
GROUP BY cluster
ORDER BY cluster;
出力:
0 | 1,2,5 | MULTILINESTRING((0 0,1 1),(2 2,1 1),(2 2,2 4))
1 | 3,4 | MULTILINESTRING((0 1,1 0),(0 1,0 4))
2 | 6 | MULTILINESTRING((1.5 2.5,2.5 3.5))
Figure
Geometry figure for visual-st-clusterrelatewin-01