我有两张带空间多边形的表格。我想从这两个表中返回多边形之间的差异几何。 我试过了:
select k.geom.STDifference(r.geometry) from table1 k, table2 r
它返回第一个和第二个表中的所有多边形,而不是差异。如何只返回差异?
答案 0 :(得分:0)
您是否尝试区分table1
和table2
中的所有对象?您的结果集将是table1
中行table2
中行数的行数,例如table1
有10行,table2
有20行,您将有200行(将每个几何与其他表中的所有几何进行比较)。
如果您想比较特定的几何图形,请在join
和table1
之间使用table2
。
我还建议您使用
select k.geom.STDifference(r.geom).ToString() from table1 k, table2 r
否则,您可能无法读取结果。 我在这里用这个例子来尝试:
create table table1 (geom geometry);
create table table2 (geom geometry);
insert into table1 (geom)
values (geometry::STGeomFromText('POLYGON((0 0, 0 2, 2 2, 2 0, 0 0))', 0));
insert into table2 (geom)
values (geometry::STGeomFromText('POLYGON((1 1, 3 1, 3 3, 1 3, 1 1))', 0));
select k.geom.STDifference(r.geom).ToString() from table1 k, table2 r;
答案 1 :(得分:0)
--- 下面的代码为 table1 中与表 2 中的多边形相交的每个多边形提供了新的多边形。表 1 中不与表 2 相交的多边形显示为空,您可以稍后匹配上一个表(为了避免为每个差异创建单独的行,您需要将连接多边形地理/几何图形合并为一行---
SELECT
A.a_geom.STDifference(B.b_geom) AS c_geom
,A.a_geom.STDifference(B.b_geom).STArea() AS c_geom_area
,A.RowID
INTO [table3]
FROM [table1] AS A
FULL JOIN [table2] AS B
ON A.a_geom.STIntersects(B.b_geom)=1
--- 现在您需要在表 1 中包含不与表 2 中的多边形相交的多边形,您可以通过简单地将表 3 中的空行与表 1 复制/匹配来实现 ---
UPDATE [table3]
SET c_geom = B.a_geom
FROM [table 3] AS A
JOIN [table1] AS B
ON A.RowID = B.RowID
WHERE A.c_geom IS NULL