กำลังอัปเดตฟิลด์เพื่อนับจำนวนจุดเป็นรูปหลายเหลี่ยมโดยใช้ 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

นี่เป็นผลลัพธ์ของฉันที่รันคิวรีนั้นกับหนึ่งในชุดข้อมูลของฉัน

ป้อนคำอธิบายรูปภาพที่นี่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.