首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >两个SQL Server图层/表的空间相交

两个SQL Server图层/表的空间相交
EN

Stack Overflow用户
提问于 2018-01-17 02:46:08
回答 1查看 5.6K关注 0票数 5

我需要在SQL Server 2016中的两个空间表之间进行空间交集,每个空间表中都有一个几何列。我有一段T-SQL,其中我从一个表(tableA)中提取一组多边形,然后使用每个多边形并对另一个表(tableB)执行STIntersects。我从tableA中生成了一系列与多边形数相对应的独立表。这些表具有相同的列。

代码语言:javascript
复制
declare @g geometry

declare @t Cursor 

Set @t = CURSOR FOR select Shape from admin where NAME1 = 'Jefferson'
open @t

FETCH Next FROM @t INTO @g
while @@FETCH_STATUS = 0
BEGIN
    Select * from ANC where ANC.Shape.STIntersects(@g) = 1
    FETCH Next FROM @t INTO @g  
END;

这将返回正确的信息,并有一个结果表和每个相交多边形的单独地图。下一步是将上面的单个输出合并到一个输出表中,但我在这方面遇到了困难。我尝试过以下几种方法:

代码语言:javascript
复制
declare @g geometry

declare @t Cursor 

Set @t = CURSOR FOR select Shape from admin where NAME1 = 'Jefferson'

open @t

declare @firstone bit 
Set @firstone = 1 
FETCH Next FROM @t INTO @g
while @@FETCH_STATUS = 0
BEGIN
    IF @firstone = 1
    BEGIN
        Select * INTO #myTempTable from ANC where ANC.Shape.STIntersects(@g) = 1
        Set @firstone = 0
    END
    ELSE
    BEGIN
        Select * from #myTempTable UNION Select * from ANC where ANC.Shape.STIntersects(@g) = 1
    END;

    FETCH Next FROM @t INTO @g  
END;

Select * From #myTempTable

这将返回一个错误,即我们不能使用地理数据类型进行联合。有一个STUnion函数,但我还没有见过它对两个表起作用。一个更好的选择是能够在两个空间表之间执行空间标识功能,但还没有找到这样的示例。但是,如果我可以在两个层之间进行空间交集,然后对结果进行并集,我可以得到大致等效的结果。因此,我的第一步是让空间交集跨两个空间层工作。

EN

回答 1

Stack Overflow用户

发布于 2018-01-17 04:20:07

你不需要光标。在这里连接就可以了

代码语言:javascript
复制
SELECT *
FROM table1 A 
INNER JOIN table2 b ON b.Shape.STIntersects(A.Shape) = 1
where A.NAME1 = 'Jefferson'
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48287902

复制
相关文章

相似问题

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