根据 SQL-SERVER 中的空间交集更新行
Updating a row according to a spatial intersection in SQL-SERVER
所以基本上我有 2 tables;
BORDERS
table 包括 Id(int)
和 Geo(DbGeometry)
空间列,包括多边形和多边形。
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
所以基本上我有 2 tables;
BORDERS
table 包括Id(int)
和Geo(DbGeometry)
空间列,包括多边形和多边形。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