Поле оновлення, щоб дати підрахунок балів у багатокутнику за допомогою STIntersects?


11

У мене шар точок (dbo.ptLayer)

  • Приблизно 1М балів
  • Тип просторової геометрії (dbo.ptLayer.geom)
  • Ще немає просторового індексу, але він створить один раз збір даних.

У мене шар багатокутника (dbo.polygonLayer)

  • Близько 500 багатокутників.
  • Тип просторової геометрії (dbo.polygonLayer.geom)

Обидва мають поля, звані ID.

Як заповнити порожнє ціле поле в шарі полігону, підраховуючи загальну кількість точок у кожному полігоні?

Хоча я маю доступ до інших програмних продуктів, мені цікаво дізнатися, що можна зробити виключно в межах SQL та SQL Server.

Я вважаю, що я повинен використовувати STIntersects, але хотів би знати, який найкращий спосіб зробити оновлення для заповнення цього поля.

Відповіді:


17

Це має робити те, що вам потрібно:

Вибір запиту:

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

З оновленням:

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

Це результат того, що я виконую цей запит на одному з моїх наборів даних

введіть тут опис зображення

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.