根据SQL-SERVER

时间:2018-04-09 05:05:41

标签: sql sql-server geospatial spatial

所以基本上我有两张桌子;

  1. BORDERS表包含Id(int)Geo(DbGeometry)空间列,包括多边形和多边形。
  2. OBJECTS表包含Id(int)BorderId(int)Point(DbGeometry)空间列,包括点。
  3. 我想根据BorderId列中OBJECTS列与Point表中Geo列的交集来填充BORDERS列。< / p>

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

2 个答案:

答案 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 

以上查询将使用BorderIdBorder列更新Id,其中包含最大交叉区域。

答案 1 :(得分:1)

您可以使用空间功能STIntercects。

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