首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据SQL-SERVER中的空间交集更新行。

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

Stack Overflow用户
提问于 2018-04-09 05:05:41
回答 2查看 857关注 0票数 3

基本上我有两张桌子;

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

我想根据OBJECTS表中的Point列与BORDERS表中的Geo列的交集填充BORDERS列。

我想用SQL查询来完成它。任何帮助都将不胜感激!谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-04-09 05:32:11

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

代码语言:javascript
复制
UPDATE O
SET O.BorderId = B.Id
FROM BORDERS B INNER JOIN  OBJECTS O ON O.Point.STIntersects(B.Geo)=1

当您有多个交叉口时,上面的查询将不能正常工作,为了获得基于区域覆盖的的最佳交集,您可以使用.STArea()找到如下所示的相交区域。

代码语言:javascript
复制
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表Id列更新该Id。

票数 2
EN

Stack Overflow用户

发布于 2018-04-09 05:37:49

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

代码语言:javascript
复制
UPDATE O
SET O.BorderId = B.Id
FROM BORDERS B
Inner join OBJECTS O O.Point.STIntersects(B.geo)=1
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49725893

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档