フィールドを更新して、STIntersectsを使用してポリゴン内のポイントの数を指定しますか?


11

ポイントレイヤー(dbo.ptLayer)があります

  • 約1Mポイント
  • 空間ジオメトリタイプ(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

これは、データセットの1つでそのクエリを実行した結果です

ここに画像の説明を入力してください

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.