20 votos

Contar puntos en un polígono con PostGIS

Tengo un problema sencillo: quiero contar el número de puntos dentro de un conjunto de polígonos.

Ya tengo un SQL pero sólo devuelve el gid de la poligona que realmente contiene puntos.

Mis tablas: una capa de polígonos con 19.000 filas y una capa de puntos con 450 filas.

La siguiente consulta SQL

SELECT grid.gid, count(*) AS totale
FROM grid, kioskdhd3
WHERE st_contains(grid.geom,kioskdhd3.geom)
GROUP BY grid.gid;

devuelve sólo unos 320 polígonos que contienen realmente puntos. Pero quiero que se devuelvan todos los polígonos, aunque el número de puntos sea 0.

Por supuesto, tiene que ver con mi cláusula DÓNDE. ¿Dónde tengo que poner mi st_contains() ?

29voto

Lars Mæhlum Puntos 4569
SELECT grid.gid, count(kioskdhd3.geom) AS totale 
FROM grid
LEFT JOIN kioskdhd3 ON st_contains(grid.geom,kioskdhd3.geom)
GROUP BY grid.gid;

-1voto

Dr Herbie Puntos 2966

Por este Las uniones a la izquierda no son compatibles con los índices GiST.

Me permito recomendar:

SELECT grid.gid, 
       SUM(CASE WHEN st_contains(grid.geom,kioskdhd3.geom) THEN 1 ELSE 0 END) AS total
FROM grid, kioskdhd3 
GROUP BY grid.gid;

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