根据 SQL-SERVER 中的空间交集更新行

Updating a row according to a spatial intersection in SQL-SERVER

所以基本上我有 2 tables;

  1. BORDERS table 包括 Id(int)Geo(DbGeometry) 空间列,包括多边形和多边形。
  2. OBJECTS table 包括 Id(int)BorderId(int)Point(DbGeometry) 包含点的空间列。

我想根据 Point 列与 Geo 列的交集,在 OBJECTS table 中填充 BorderId 列11=] table.

我想用 SQL 查询来完成。任何帮助将非常感激!谢谢!

您可以使用STIntersects 找到交点。您的更新查询应类似于以下查询。

UPDATE O
SET O.BorderId = B.Id
FROM BORDERS B INNER JOIN  OBJECTS O ON O.Point.STIntersects(B.Geo)=1

当你有多个交叉点时,以上查询将无法正常工作,要根据覆盖的区域获得最佳交叉点,你可以使用.STArea()找到交叉区域喜欢以下。

UPDATE O
SET O.BorderId =
  (
   SELECT TOP 1 B.Id FROM BORDERS B
   WHERE O.Point.STIntersects(B.Geo)=1
   ORDER BY O.Point.STIntersects(B.Geo).STArea() DESC
  )
FROM OBJECTS O 

以上查询将使用具有最大交叉面积的 Border table Id 列更新 BorderId

您可以为此使用空间函数 STIntercects。

UPDATE O
SET O.BorderId = B.Id
FROM BORDERS B
Inner join OBJECTS O O.Point.STIntersects(B.geo)=1