2D のノイズありアプリケーションにおける密度ベース空間クラスタリング (DBSCAN) アルゴリズムを使用して、各ジオメトリオブジェクトにクラスター ID を割り当てるウィンドウ関数です。
構文
構文 1
integer ST_ClusterDBSCAN(geometry winset geom, float8 eps, integer minpoints);構文 2
integer ST_ClusterDBSCANSpheroid(geometry winset geom, float8 eps, integer minpoints);
パラメーター
| パラメーター | 説明 |
|---|---|
geom | クラスタリング対象のジオメトリオブジェクト。 |
eps | 指定する最小距離。 |
minpoints | あるジオメトリオブジェクトがクラスターのコアジオメトリオブジェクトであるかを識別するために、`eps` パラメーターで指定された最小距離内に存在する必要があるジオメトリオブジェクトの最小数。 |
説明
ST_ClusterKMeans とは異なり、ST_ClusterDBSCAN ではクラスター数を指定する必要がありません。代わりに、定義した距離と密度からクラスターを導出します。
ジオメトリオブジェクトは、次のいずれかの条件を満たす場合にクラスターに追加されます。
少なくとも
minpoints個のオブジェクトが、ジオメトリ オブジェクトからepsの距離以内に存在します。この場合、そのオブジェクトはクラスターの [コア] ジオメトリ オブジェクトです。ジオメトリオブジェクトから
epsの距離内にコアジオメトリオブジェクトが存在する場合。この場合、そのオブジェクトはクラスターの 境界 ジオメトリオブジェクトになります。
境界ジオメトリオブジェクトは、複数のクラスターのコアジオメトリオブジェクトから eps の距離内に存在する可能性があります。この場合、境界ジオメトリオブジェクトはそれらのクラスターのいずれかにランダムに割り当てられ、結果として生成されるクラスターには minpoints より少ないオブジェクトが含まれることがあります。
ジオメトリオブジェクトがどちらの条件も満たさない場合、クラスター ID として NULL が割り当てられます。
距離計算:
構文 1 (
ST_ClusterDBSCAN):ユークリッド距離を使用します。epsの値は、座標間のユークリッド距離として解釈されます。構文 2 (
ST_ClusterDBSCANSpheroid):回転楕円体上のジオメトリオブジェクトの長さを使用します。ジオメトリに経度と緯度で表される空間参照識別子 (SRID) がある場合、クラスタリングは SRID 座標系で実行され、距離はメートル単位で測定されます。
例
SELECT ST_ClusterDBSCAN(geom, 2, 1) OVER (), st_AsText(geom)
FROM (
SELECT unnest(ARRAY[
'POINT (0 0)'::geometry,
'POINT(1 1)'::geometry,
'POINT (-1 -1)'::geometry,
'POINT (-3 -3)'::geometry
]) AS geom
) AS test;出力:
st_clusterdbscan | st_astext
------------------+--------------
0 | POINT(0 0)
0 | POINT(1 1)
0 | POINT(-1 -1)
1 | POINT(-3 -3)
(4 rows)