Função de janela que atribui um ID de cluster a cada objeto geométrico usando o algoritmo DBSCAN (agrupamento espacial baseado em densidade 2D com ruído).
Sintaxe
-
Sintaxe 1
integer ST_ClusterDBSCAN(geometry winset geom, float8 eps, integer minpoints); -
Sintaxe 2
integer ST_ClusterDBSCANSpheroid(geometry winset geom, float8 eps, integer minpoints);
Parâmetros
|
Parâmetro |
Descrição |
|
|
Objeto geométrico a agrupar. |
|
|
Distância mínima a especifique. |
|
|
Número mínimo de objetos geométricos dentro da distância definida pelo parâmetro eps. Este parâmetro determina se um objeto geométrico é o objeto central de um cluster. |
Descrição
Ao contrário de ST_ClusterKMeans, a função ST_ClusterDBSCAN não exige a definição do número de clusters. Ela deriva os agrupamentos com base na distância e na densidade definidas.
Um objeto geométrico entra em um cluster se atender a uma das condições a seguir:
Pelo menos
minpointsobjetos estão dentro da distânciaepsdo objeto geométrico. Nesse caso, o objeto é um objeto central do cluster.Um objeto central está dentro da distância
epsdo objeto geométrico. Nesse caso, o objeto é um objeto de borda do cluster.
Um objeto de borda pode estar dentro da distância eps de objetos centrais de vários clusters. Quando isso ocorre, o objeto de borda é atribuído aleatoriamente a um desses clusters. O cluster resultante pode conter menos objetos que minpoints.
Se o objeto geométrico não atender a nenhuma das condições, ele recebe um ID de cluster NULL.
Cálculo de distância:
Sintaxe 1 (
ST_ClusterDBSCAN): usa a distância euclidiana. O valor deepsrepresenta a distância euclidiana entre coordenadas.Sintaxe 2 (
ST_ClusterDBSCANSpheroid): usa o comprimento do objeto geométrico em um elipsoide. Se a geometria tiver um identificador de referência espacial (SRID) em longitude e latitude, o agrupamento ocorre no sistema de coordenadas do SRID, com distâncias em metros.
Exemplos
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;
Saída:
st_clusterdbscan | st_astext
------------------+--------------
0 | POINT(0 0)
0 | POINT(1 1)
0 | POINT(-1 -1)
1 | POINT(-3 -3)
(4 rows)