返回聚類結果ID的視窗函數,此函數基於二維的DBSCAN演算法(Density-based spatial clustering of applications with noise)計算聚類。
文法
- 文法一:
integer ST_ClusterDBSCAN(geometry winset geom , float8 eps , integer minpoints);
- 文法二:
integer ST_ClusterDBSCANSpheroid(geometry winset geom , float8 eps , integer minpoints);
參數
參數名稱 | 描述 |
geom | 目標geometry對象。 |
eps | 所需的最小距離。 |
minpoints | 成為核心對象所需的鄰域內最小對象數。 |
描述
- 與ST_ClusterKMeans不同,它不需要指定簇的數量,而是使用所需的距離和密度參數來構造每個簇。
- 如果輸入Geometry對象滿足以下條件之一,則會將其添加到簇中:
- 一個核心對象:如果在一個對象的eps-鄰域(即到此對象距離小於eps的範圍)記憶體在至少minpoints個對象,則此對象是核心對象。
- 一個邊界對象:一個對象如果到某個核心對象距離小於eps,且自身不是核心對象,則此對象是邊界對象。
邊界對象可能在多個核心對象的最小距離範圍內。在此情況下,分配到任意核心對象都是正確的,這時,產生的最小簇中的對象數可能少於指定的最小對象數。
- 不符合加入任何其他簇標準的對象將被分配為名為NULL的簇。
- 該函數是視窗函數。
- 如果使用文法一ST_ClusterDBSCAN函數進行聚類,則會使用歐式距離進行聚類,eps以座標間的歐式距離計算。
- 如果使用文法二ST_ClusterDBSCANSpheroid函數,則表示根據橢球上的距離進行聚類。
例如,當geometry有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)