ST_ClusterDBSCAN — Fönsterfunktion som returnerar ett kluster-ID för varje indatageometri med hjälp av DBSCAN-algoritmen.
integer ST_ClusterDBSCAN(geometry winset geom, float8 eps, integer minpoints);
En fönsterfunktion som returnerar ett klusternummer för varje indatageometri med hjälp av DBSCAN-algoritmen ( 2D Density-based spatial clustering of applications with noise). Till skillnad från ST_ClusterKMeans kräver den inte att antalet kluster anges, utan använder istället parametrarna för önskat avstånd(eps) och densitet(minpoints) för att bestämma varje kluster.
En indatageometri läggs till i ett kluster om den är antingen:
Observera att gränsgeometrier kan ligga inom eps-avstånd från kärngeometrier i mer än ett kluster. Båda tilldelningarna skulle vara korrekta, så gränsgeometrin kommer godtyckligt att tilldelas ett av de tillgängliga klustren. I den här situationen är det möjligt att ett korrekt kluster genereras med färre än minpunktsgeometrier. För att säkerställa deterministisk tilldelning av gränsgeometrier (så att upprepade anrop till ST_ClusterDBSCAN ger identiska resultat), använd en ORDER BY-klausul i fönsterdefinitionen. Tvetydiga klustertilldelningar kan skilja sig från andra DBSCAN-implementeringar.
|
|
|
Geometrier som inte uppfyller kriterierna för att ingå i något kluster tilldelas ett klusternummer som är NULL. |
Tillgänglighet: 2.3.0
Denna metod stöder cirkulära strängar och kurvor.
Klustring av polygoner inom 50 meter från varandra och krav på minst 2 polygoner per kluster.
Kluster inom 50 meter med minst 2 objekt per kluster. Singletons har NULL för 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)
|
Ett exempel som visar hur man kombinerar skiften med samma klusternummer till geometriska samlingar.
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;