ST_ClusterDBSCAN — DBSCAN (ノイズ適用可能な密度に基づいた空間クラスタリング)アルゴリズムの2次元実装に基づいて、それぞれの入力ジオメトリが入るクラスタの整数識別子を返すウィンドウ関数です。
integer ST_ClusterDBSCAN(
geometry winset geom, float8 eps, integer minpoints)
;
DBSCAN (ノイズ適用可能な密度に基づいた空間クラスタリング)アルゴリズムの2次元実装に基づいて、それぞれの入力ジオメトリが入るクラスタの整数識別子を返します。ST_ClusterKMeansと違って、クラスタ数の指定は求められず、所望する距離 (eps
)と密度(minpoints
)をクラスタを構築するためのパラメータとして使います。
入力ジオメトリは次の場合にクラスタに追加されます。
eps
の範囲内にある他のジオメトリがminpoints
個以上ある「核」ジオメトリ
核ジオメトリとの距離がeps
以内である「境界」ジオメトリ
境界ジオメトリがeps
以内に複数の核ジオメトリがあるかも知れないことに注意して下さい。この場合には、どちらに割り当てられても正しく、境界ジオメトリは、対象クラスタのうちの一つに任意に割り当てられます。これらの場合には、minpoints
より少ないジオメトリで正しいクラスタを生成できます。境界ジオメトリの割り当てが曖昧な時、ウィンドウの定義にORDER BY句が含まれている場合には、ST_ClusterDBSCANは同じ結果を返しますが、クラスタの割り当ては同じアルゴリズムの他の実装と異なる可能性があります。
![]() | |
どのクラスタの参加基準にも合わない入力ジオメトリは、番号をNULLとします。 |
Availability: 2.3.0 - GEOSが必要です。
クラスタ番号をそれぞれの群に割り当てます。
SELECT parcel_id, ST_ClusterDBSCAN(geom, eps := 0.5, minpoints := 5) over () AS cid FROM parcels;
同じクラスタ番号の群を一つのジオメトリに統合します。名前付き引数を使用しています。
SELECT cid, ST_Collect(geom) AS cluster_geom, array_agg(parcel_id) AS ids_in_cluster FROM ( SELECT parcel_id, ST_ClusterDBSCAN(geom, eps := 0.5, minpoints := 5) over () AS cid, geom FROM parcels) sq GROUP BY cid;