我正在创建一个SQL Server表,如果它位于SITES_TEST层之内,它将从OS MasterMap层获取数据。
首先,我正在使用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'))
在SQL Server中运行上面的查询后,它返回重叠的数据以及所包含的数据。我知道我可以使用STContains,但是这样就忽略了边界内外的数据。
我希望我能够使用STDifference在ASSETS表上运行UPDATE。
UPDATE ASSETS(GEOMETRY)
(select b.GEOMETRY from
SITES_TEST a,
MM_TOPO b
where a.geometry.STDifference(b.geometry)=1)
但是我认为我正在以错误的方式进行处理,因为这将返回布尔错误。
数据类型无效的运算符。运算符等于,类型等于 几何。
摘要: 我正在尝试删除另一个几何之外的几何。第一张图片显示一个蓝色多边形,然后运行SQL脚本,导致第二张图片显示红色数据,该数据位于第一张图片的蓝色边界多边形之外。我要删除蓝色多边形外部的数据。
答案 0 :(得分:1)
您不仅需要intersect
感兴趣的多边形(返回所有相交的几何形状(如您所知))的几何图形,还需要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'))