Cập nhật trường để cho số điểm trong đa giác bằng STIntersects?


11

Tôi có một lớp điểm (dbo.ptLayer)

  • Khoảng 1 triệu điểm
  • Loại hình học không gian (dbo.ptLayer.geom)
  • Chưa có chỉ mục không gian, nhưng sẽ tạo một khi thu thập dữ liệu hoàn tất.

Tôi có một lớp đa giác (dbo.polygonLayer)

  • Khoảng 500 đa giác.
  • Loại hình học không gian (dbo.polygonLayer.geom)

Cả hai đều có các trường được gọi là ID.

Làm cách nào để tôi điền vào một trường số nguyên trống trong lớp đa giác, với tổng số điểm trong mỗi đa giác?

Mặc dù tôi có quyền truy cập vào các sản phẩm phần mềm khác, tôi muốn tìm hiểu những gì có thể được thực hiện hoàn toàn trong SQL và SQL Server.

Tôi tin rằng tôi nên sử dụng STIntersects nhưng muốn biết cách tốt nhất để thực hiện cập nhật để đưa vào lĩnh vực này là gì.

Câu trả lời:


17

Điều này sẽ làm những gì bạn cần:

Một truy vấn chọn:

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

Với bản cập nhật:

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

Đây là kết quả của việc tôi chạy truy vấn đó trên một trong các bộ dữ liệu của mình

nhập mô tả hình ảnh ở đây

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.