返回表示位于一个 geometry 实例或者另一个 geometry 实例中的所有点的对象,但不包含同时位于这两个实例中的那些点。
语法
.STSymDifference ( other_geometry )
参数
- other_geometry
另一个 geometry 实例,即除调用 STSymDistance() 所在的实例以外的另一个实例。
返回类型
SQL Server 返回类型:geometry
CLR 返回类型:SqlGeometry
注释
如果 geometry 实例的空间引用 ID (SRID) 不匹配,则此方法始终返回 Null。 只有在输入实例包含圆弧段时,结果才可能包含圆弧段。
示例
A.计算两个 Polygon 实例的余集
下面的示例使用 STSymDifference() 计算两个 Polygon 实例的余集。
DECLARE @g geometry;
DECLARE @h geometry;
SET @g = geometry::STGeomFromText('POLYGON((0 0, 0 2, 2 2, 2 0, 0 0))', 0);
SET @h = geometry::STGeomFromText('POLYGON((1 1, 3 1, 3 3, 1 3, 1 1))', 0);
SELECT @g.STSymDifference(@h).ToString();
B.计算 CurvePolygon 和 Polygon 实例之间的余集
下面的示例返回一个表示 CurvePolygon 和 Polygon 之间余集的 GeometryCollection。
DECLARE @g geometry = 'CURVEPOLYGON (CIRCULARSTRING (0 -4, 4 0, 0 4, -4 0, 0 -4))';
DECLARE @h geometry = 'POLYGON ((1 -1, 5 -1, 5 3, 1 3, 1 -1))';
SELECT @h.STSymDifference(@g).ToString();
C.对 CurvePolygon 实例和内切的 Polygon 实例使用 STSymDifference()
下面的示例返回一个具有内部 Polygon 环的 CurvePolygon 实例,该实例表示比较的两个实例的余集。
DECLARE @g geometry = 'CURVEPOLYGON (CIRCULARSTRING (0 -4, 4 0, 0 4, -4 0, 0 -4))';
DECLARE @h geometry = 'POLYGON ((1 -1, 2 -1, 2 1, 1 1, 1 -1))';
SELECT @h.STSymDifference(@g).ToString();