0

如果它位于 SITES_TEST 层中,我正在创建一个从 OS MasterMap 层获取数据的 SQL Server 表。

首先,我使用 STIntersects 将 OS MM 数据放入资产层。

INSERT INTO ASSETS(GEOMETRY, THEMES) 
    (select b.GEOMETRY, b.THEMES from 
          SITES_TEST a,
          MM_TOPO b
          where a.geometry.STBuffer(1).STIntersects(b.geometry) = 1 AND  (b.THEMES ='Land' or b.THEMES ='Roads Tracks And Paths')) 

蓝色边界是我的站点图层,在后台 OS MasterMap 中。 蓝色边界是我的站点层

在 SQL Server 中运行上述查询后,它会返回重叠数据以及包含的数据。我知道我可以使用 STContains,但是这样就忽略了边界内外的数据。

在此处输入图像描述

我希望我能够使用 STDifference 在资产表上运行更新。

UPDATE ASSETS(GEOMETRY) 
        (select b.GEOMETRY from 
              SITES_TEST a,
              MM_TOPO b
              where a.geometry.STDifference(b.geometry)=1) 

但我认为我的做法是错误的,因为这会返回一个布尔错误。

数据类型的运算符无效。运算符等于等于,类型等于几何。

摘要:我正在尝试删除另一个几何之外的几何。第一张图片显示一个蓝色多边形,然后运行 ​​SQL 脚本,生成第二张图片,红色显示位于第一张图片蓝色边界多边形之外的数据。我想删除现在在蓝色多边形之外的数据。

4

1 回答 1

1

而不是只询问intersect感兴趣的多边形的几何图形,它返回所有相交的几何图形(如您所见),您只需要与感兴趣的多边形相交的几何图形部分。所以像:

INSERT INTO ASSETS(GEOMETRY, THEMES) 
    (select b.GEOMETRY.STIntersection(a.geometry, b.THEMES from 
          SITES_TEST a,
          MM_TOPO b
          where a.geometry.STBuffer(1).STIntersects(b.geometry) = 1 AND  (b.THEMES ='Land' or b.THEMES ='Roads Tracks And Paths')) 
于 2019-03-20T13:45:50.617 回答