删除多边形外部的几何数据

Remove Geometry data that is outside of a polygon

我正在创建一个 SQL 服务器 table,它从 OS MasterMap 层获取数据,如果它位于 SITES_TEST 层内。

首先,我使用 STIntersects 将 OS MM 数据导入 ASSETS 层。

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服务器上它returns重叠的数据以及包含的数据。我知道我可以使用 STContains,但这样会遗漏边界内外的数据。

我希望能够使用 STDifference 运行 对资产 table 进行更新。

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

但我认为我正在以错误的方式处理它,因为它返回了一个布尔错误。

Invalid operator for data type. Operator equals equal to, type equals geometry.

总结: 我正在尝试删除另一个几何体之外的几何体。第一张图片显示蓝色多边形,然后 SQL 脚本是 运行,这导致第二张图片以红色显示位于第一张图片的蓝色边界多边形之外的数据。我想删除现在位于蓝色多边形之外的数据。

而不是仅仅询问 intersect 感兴趣的多边形的几何形状,returns 所有相交的几何形状(如您所见),您只需要 parts of the geometry that 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'))