Processing math: 100%

22 votos

¿Se puede agrupar por geometría en PostGIS?

¿Se puede agrupar por geometría?

Hacemos mucho recuento de puntos por geometrías poligonales, lo que implica intersecar primero los datos para contar instancias de alumnos. por límite escolar, grupo de manzanas, etc:

SELECT
  n.nbhd_id
  , count(*) AS count_burglaries
FROM denver.crime AS c
  JOIN denver.neighborhoods AS n
    ON ST_Intersects(c.geom, n.geom)

WHERE c.offense_ty LIKE 'BURG%'
GROUP BY n.nbhd_id

El segundo paso es incluir una subconsulta para unir la geometría de la tabla de polígonos con la consulta de recuento:

SELECT

count.*
, n.nbhd_name
, n.geom
FROM (
SELECT
n.nbhd_id
, count(*) AS count_burglaries
FROM denver.crime AS c
JOIN denver.neighborhoods AS n
ON ST_Intersects(c.geom, n.geom)

WHERE c.offense_ty LIKE 'BURG%'
GROUP BY n.nbhd_id

) AS count

JOIN denver.neighborhoods AS n
ON count.nbhd_id = n.nbhd_id

Pero parece que también se puede utilizar la geometría en GROUP BY:

SELECT
n.nbhd_id
, n.nbhd_name
, n.geom

, count(*) AS count_burglaries
FROM denver.crime AS c
JOIN denver.neighborhoods AS n
ON ST_Intersects(c.geom, n.geom)

WHERE c.offense_ty LIKE 'BURG%'
GROUP BY n.nbhd_id, nbhd_name, n.geom

¿Es correcto incluir la geometría en el GROUP BY?

21voto

MBCook Puntos 8316

Es casi seguro que no hay nada malo en agrupar por geometría en este caso, puesto que ya está agrupando por un ID único ( nbhd_id ). Y, como usted señala, le ahorra una unión y hace que la consulta sea más limpia.

Es importante saber que un GROUP BY geom de PostGIS 2.3 y versiones anteriores agrupa las filas basándose en la igualdad de los límites, no en la igualdad geométrica. Con datos reales, no contrastados, esto suele tener el mismo efecto que agrupar en base a la igualdad geométrica (y es mucho más rápido), pero puede no producir los resultados esperados cuando varios polígonos distintos tienen el mismo cuadro delimitador. A partir de PostGIS 2.4, GROUP BY opera sobre una definición rígida de igualdad geométrica, teniendo en cuenta el punto de partida y la orientación de las geometrías.

Porque ya estás agrupando en nbhd_id seguirá viendo filas separadas aunque dos polígonos de vecindad distintos compartan una caja delimitadora.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X