全部產品
Search
文件中心

ApsaraDB RDS:ST_ClusterDBSCAN

更新時間:Feb 28, 2024

返回聚類結果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)