Contar pontos no polígono com Postgis

16

Eu tenho um problema simples: quero contar o número de pontos em um conjunto de polígonos.

Eu já tenho um SQL, mas ele apenas devolve o gid do polígono que realmente contém pontos.

Minhas tabelas: uma camada de polígono com 19.000 linhas e uma camada de ponto com 450 linhas.

O seguinte SQL

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

retorne apenas cerca de 320 polígonos que realmente contêm pontos. Mas quero que todos os polígonos sejam retornados, mesmo que o número de pontos seja 0.

Claro que tem a ver com a minha cláusula WHERE. Onde devo colocar meus st_contains?

Obrigado Carsten

hoge6b01
fonte
obrigado, mas todos eles têm uma cláusula WHERE. Não sei se preciso de um. Como você reescreveria?
Hoge6b01

Respostas:

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
fonte
Oi Nicklas, recebi esta resposta da lista de discussão, certo? Obrigado a todos #
hoge6b01 17/03/2013
2
Não, desculpe, é semelhante? Bem, um exterior junta é nenhuma ciência de foguetes ao lidar com bancos de dados relacionais ;-)
Nicklas Aven
1
:-) Eu tive que verificar a lista. Veja o momento. A minha resposta aqui foi antes resposta lista-, mas como você disse, muito semelhante :-)
Nicklas Aven
-1

Por isso, as associações à esquerda não são suportadas nos índices GiST.

Posso 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;
raphael
fonte
1
A consulta não utiliza índices espaciais: explan.depesz.com/s/U6Iy . Nicklas resposta faz: explain.depesz.com/s/nhH
nickves