Atualizando o campo para fornecer a contagem de pontos no polígono usando STIntersects?

11

Eu tenho uma camada de pontos (dbo.ptLayer)

  • Cerca de 1 milhão de pontos
  • Tipo de geometria espacial (dbo.ptLayer.geom)
  • Ainda não há índice espacial, mas criará um quando a coleta de dados for concluída.

Eu tenho uma camada de polígono (dbo.polygonLayer)

  • Cerca de 500 polígonos.
  • Tipo de geometria espacial (dbo.polygonLayer.geom)

Ambos têm campos chamados ID.

Como preencho um campo inteiro vazio na camada de polígono, com uma contagem do número total de pontos em cada polígono?

Embora eu tenha acesso a outros produtos de software, estou interessado em saber o que pode ser feito exclusivamente no SQL e no SQL Server.

Acredito que deveria usar STIntersects, mas gostaria de saber qual é a melhor maneira de fazer uma atualização para preencher esse campo.

Simon
fonte

Respostas:

17

Isso deve fazer o que você precisa:

Uma consulta de seleção:

SELECT polygons.id, Count(*) 
FROM points
JOIN polygons
ON polygons.ogr_geometry.STContains(points.ogr_geometry) = 1
GROUP BY polygons.id

Com uma atualização:

UPDATE polygons
SET [countcolumn] = counts.pointcount
FROM polygons
JOIN
(
 SELECT polygons.id, Count(*) 
 FROM points
 JOIN polygons
 ON polygons.ogr_geometry.STContains(points.ogr_geometry) = 1
 GROUP BY polygons.id
) counts ON polygons.id = counts.id

Esse é o resultado de eu executar essa consulta em um dos meus conjuntos de dados

insira a descrição da imagem aqui

Nathan W
fonte