Compter des points dans un polygone avec Postgis

16

J'ai un problème simple: je veux compter le nombre de points dans un ensemble de polygones.

J'ai déjà un SQL mais il ne donne que le gid du polygone qui contient réellement des points.

Mes tables: une couche polygonale avec 19 000 lignes et une couche ponctuelle avec 450 lignes.

Le SQL suivant

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

ne renvoient que 320 polygones qui contiennent réellement des points. Mais je veux que tous les polygones soient retournés, même si le nombre de points est 0.

Bien sûr, cela a à voir avec ma clause WHERE. Où dois-je mettre mes st_contains?

Merci Carsten

hoge6b01
la source
merci, mais ils ont tous une clause WHERE. Je ne sais pas si j'en ai besoin. Comment le réécririez-vous?
hoge6b01

Réponses:

23
SELECT grid.gid, count(kioskdhd3.geom) AS totale 
FROM grid LEFT JOIN kioskdhd3 
ON st_contains(grid.geom,kioskdhd3.geom) 
GROUP BY grid.gid;
Nicklas Avén
la source
Salut Nicklas, a obtenu cette réponse de la liste de diffusion, non? Merci à tous
hoge6b01
2
Non, désolé, est-ce similaire? Eh bien, une jointure externe n'est pas
sorcière
1
:-) J'ai dû vérifier la liste. Regardez le timing. Ma réponse ici était avant la liste - réponse, mais comme vous l'avez dit, très similaire :-)
Nicklas Avén
-1

Par ceci gauche, les jointures ne sont pas prises en charge dans les index GiST.

Puis-je recommander:

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;
raphael
la source
1
Le querry n'utilise pas d'index spatiaux: expliquez.depesz.com/s/U6Iy . Réponse de Nicklas: expliquez.depesz.com/s/nhH
nickves