ST_ClusterDBSCAN — Fonction Window qui renvoie un identifiant de cluster pour chaque géométrie d'entrée en utilisant l'algorithme DBSCAN.
integer ST_ClusterDBSCAN(
geometry winset geom, float8 eps, integer minpoints)
;
Une fonction window qui renvoie un numéro de cluster pour chaque géométrie d'entrée, en utilisant l'algorithme 2D Density-based spatial clustering of applications with noise (DBSCAN). Contrairement à ST_ClusterKMeans, elle ne nécessite pas la spécification du nombre de clusters, mais utilise les paramètres de distance (eps
) et de densité (minpoints
) pour déterminer chaque cluster.
Une géométrie d'entrée est ajoutée à un cluster si elle est l'une ou l'autre :
Notez que les géométries situés en bordure peuvent se trouver à eps
distance des géométries centrales dans plus d'un cluster. L'une ou l'autre assignation serait correcte, de sorte que la géométrie de bordure sera arbitrairement assignée à l'un des clusters disponibles. Dans cette situation, il est possible qu'un cluster correct soit généré avec moins de géométries minpoints
. Pour garantir une affectation déterministe des géométries de bordure (de sorte que des appels répétés à ST_ClusterDBSCAN produisent des résultats identiques), utilisez une clause ORDER BY
dans la définition de la fonction window. Les affectations de clusters ambigus peuvent différer d'autres implémentations DBSCAN.
![]() |
|
Les géométries qui ne répondent pas aux critères d'appartenance à un cluster se voient attribuer un numéro de cluster NULL. |
Disponibilité : 2.3.0
Cette méthode prend en charge les types Circular String et Curve.
Regroupement des polygones à moins de 50 mètres les uns des autres, et nécessité d'avoir au moins 2 polygones par cluster.
![]() Clusters dans un rayon de 50 mètres avec au moins 2 éléments par cluster. Les singletons ont NULL pour 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) |
Un exemple montrant la combinaison de parcelles ayant le même numéro de cluster dans des collections géométriques.
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;