STDifference(geography 数据类型)

适用于: SQL Server Azure SQL 数据库 Azure SQL 托管实例

返回一个对象,该对象表示来自一个 geography 实例的点集,该点集在另一个 geography 实例之外。

语法

  
.STDifference ( other_geography )  

参数

other_geography
另一个 geography 实例,指示要从调用 STDifference() 的实例中删除的点。

返回类型

SQL Server 返回类型:geography

CLR 返回类型:SqlGeography

例外

如果实例包含对拓边缘,此方法将引发 ArgumentException

备注

如果 geography 实例的空间引用标识符 (SRID) 不匹配,则此方法始终返回 null

在 SQL Server 中,服务器上可能返回的结果集已扩展到 FullGlobe 实例。 SQL Server 支持大于半球的空间实例。 只有在输入实例包含圆弧线段时,结果才会包含圆弧线段。 此方法不精确。

示例

A. 计算两个地理实例之间的差值

以下示例使用 STDifference() 计算两个 geography 实例之间的差别。

DECLARE @g geography;  
DECLARE @h geography;  
SET @g = geography::STGeomFromText('POLYGON((-122.358 47.653, -122.348 47.649, -122.348 47.658, -122.358 47.658, -122.358 47.653))', 4326);  
SET @h = geography::STGeomFromText('LINESTRING(-122.360 47.656, -122.343 47.656)', 4326);  
SELECT @g.STDifference(@h).ToString();  

B. 将 FullGlobe 与 STDifference() 结合使用

下面的示例使用 FullGlobe 实例。 第一个结果是一个空的 GeometryCollection,第二个结果是 Polygon 实例。 当 STDifference() 实例为参数时,GeometryCollection 返回一个空的 FullGlobe。 调用 geography 实例的每个点都包含在 FullGlobe 实例中。

 DECLARE @g geography = 'POLYGON((-122.358 47.653, -122.348 47.649, -122.348 47.658, -122.358 47.658, -122.358 47.653))';  
 DECLARE @h geography = 'FULLGLOBE';  
 SELECT @g.STDifference(@h).ToString(),  
 @h.STDifference(@g).ToString();

另请参阅

Geography 实例上的 OGC 方法