【问题标题】:Spatial Intersect of two SQL Server layers/tables两个 SQL Server 层/表的空间相交
【发布时间】:2018-01-16 18:46:08
【问题描述】:

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

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;

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

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 函数,但我还没有看到它与两个表一起工作。更好的选择是能够在两个空间表之间执行空间标识函数,但还没有找到这样的例子。但是,如果我可以在两层之间进行空间交集,然后合并结果,我可以获得一个粗略的等价物。因此,我的第一步是让空间相交跨两个空间层起作用。

【问题讨论】:

    标签: sql-server sql-server-2016 spatial-query


    【解决方案1】:

    您不需要光标。加入会在这里做

    SELECT *
    FROM table1 A 
    INNER JOIN table2 b ON b.Shape.STIntersects(A.Shape) = 1
    where A.NAME1 = 'Jefferson'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-09
      • 1970-01-01
      相关资源
      最近更新 更多