Name

ST_ClusterDBSCAN — 使用DBSCAN算法返回每个输入几何图形的群集ID的窗口函数。

Synopsis

integer ST_ClusterDBSCAN(geometry winset geom, float8 eps, integer minpoints);

描述

根据的2D实现,返回每个输入几何的簇号 基于密度的噪声应用空间集群(DBSCAN) 算法。不像 ST_ClusterKMeans ,它不需要指定簇数,而是使用所需的 距离 ( eps )和密度( minpoints )参数来构建每个集群。

如果输入几何体符合以下任一条件,则会将其添加到簇中:

  • A "core" geometry, that is within eps distance of at least minpoints input geometries (including itself) or

  • A "border" geometry, that is within eps distance of a core geometry.

请注意,边界几何图形可能位于 eps 多个簇中核心几何体的距离;在这种情况下,任一指定都是正确的,并且边界几何体将被任意分配给其中一个可用簇。在这些情况下,可以使用以下数量生成正确的集群 minpoints 几何图形。当边界几何图形的分配不明确时,如果窗口定义中包括ORDER BY子句,则重复调用ST_ClusterDBSCAN将产生相同的结果,但群集分配可能不同于相同算法的其他实现。

[Note]

不满足加入任何其他聚类的条件的输入几何图形将被指定簇号为NULL。

可用性:2.3.0

示例

将簇号分配给彼此相距50米内的每个多边形。每个聚类至少需要2个面

在50米范围内,每个集群至少2个。单例的CID为空

SELECT name, ST_ClusterDBSCAN(geom, eps := 50, minpoints := 2) over () AS cid
FROM boston_polys
WHERE name > '' AND building > ''
        AND ST_DWithin(geom,
        ST_Transform(
            ST_GeomFromText('POINT(-71.04054 42.35141)', 4326), 26986),
           500);

                name                 | bucket
-------------------------------------+--------
 Manulife Tower                      |      0
 Park Lane Seaport I                 |      0
 Park Lane Seaport II                |      0
 Renaissance Boston Waterfront Hotel |      0
 Seaport Boston Hotel                |      0
 Seaport Hotel & World Trade Center  |      0
 Waterside Place                     |      0
 World Trade Center East             |      0
 100 Northern Avenue                 |      1
 100 Pier 4                          |      1
 The Institute of Contemporary Art   |      1
 101 Seaport                         |      2
 District Hall                       |      2
 One Marina Park Drive               |      2
 Twenty Two Liberty                  |      2
 Vertex                              |      2
 Vertex                              |      2
 Watermark Seaport                   |      2
 Blue Hills Bank Pavilion            |   NULL
 World Trade Center West             |   NULL
(20 rows)

将具有相同簇号的地块合并为单个几何图形。它使用命名参数调用

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;
    

另请参阅

ST_DWithin, ST_ClusterKMeans, ST_ClusterIntersecting, ST_ClusterWithin