¿Está bien agrupar por geometría en PostGIS?

15

¿Está bien agrupar por geometría?

Hacemos muchos puntos de conteo por geometrías de polígonos, lo que implica intersectar primero los datos para contar las instancias de los estudiantes. por límite escolar, grupo de bloques, 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 ajustar una subconsulta para unir la geometría de la tabla de polígonos a 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 puedes usar 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

¿Está incluida la geometría en el GRUPO POR un enfoque correcto?

    
pregunta DPSSpatial 10.09.2017 - 23:57

1 respuesta

15

Es casi seguro que no haya nada de malo en agrupar por geometría en este caso, ya que ya está agrupando por una ID única ( 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 una cláusula GROUP BY geom en PostGIS 2.3 y anteriores en realidad agrupan filas en función de la igualdad del cuadro delimitador, no de la igualdad geométrica. Con datos reales, no inventados, esto a menudo tiene el mismo efecto que la agrupación en 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 de límite. A partir de PostGIS 2.4, GROUP BY opera en una definición rígida de igualdad geométrica, teniendo en cuenta el punto de inicio y la orientación de las geometrías.

Debido a que ya estás agrupando en nbhd_id , aún verás filas separadas incluso si dos polígonos de vecindario distintos comparten un cuadro delimitador.

    
respondido por el dbaston 11.09.2017 - 01:59

Lea otras preguntas en las etiquetas