所以基本上我有两张桌子;
BORDERS
表包含Id(int)
和Geo(DbGeometry)
空间列,包括多边形和多边形。OBJECTS
表包含Id(int)
,BorderId(int)
和Point(DbGeometry)
空间列,包括点。我想根据BorderId
列中OBJECTS
列与Point
表中Geo
列的交集来填充BORDERS
列。< / p>
我想用SQL查询来做。任何帮助将非常感激!谢谢!
答案 0 :(得分:2)
您可以使用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
以上查询将使用BorderId
表Border
列更新Id
,其中包含最大交叉区域。
答案 1 :(得分:1)
您可以使用空间功能STIntercects。
UPDATE O
SET O.BorderId = B.Id
FROM BORDERS B
Inner join OBJECTS O O.Point.STIntersects(B.geo)=1