Reduce(geometry 数据类型)

返回给定 geometry 实例的近似值,该值通过对实例运行具有给定公差的 Douglas-Peucker 算法来生成。

语法

.Reduce ( tolerance )

参数

  • tolerance
    类型为 float 的值。tolerance 是输入到 Douglas-Peucker 算法的公差。

返回类型

SQL Server 返回类型:geometry

CLR 返回类型:SqlGeometry

注释

对于集合类型,此算法单独作用于包含在该实例中的每个 geometry。

此算法不修改 Point 实例。

在 LineString 实例上,Douglas-Peucker 算法保持该实例的原始起点和终点,并且该算法以迭代方式重新添加原始实例中与结果偏差最大的点,直到任何点的偏差都不超出给定公差。

注意事项注意

Douglas-Peucker 算法可能导致无效的 LineString 实例,但 Reduce 方法将对于生成的实例在内部调用 MakeValid 方法。这可能导致从生成的实例中删除原始起始点和结束点。有关示例,请参阅 Showing an example where the original start and end points are lost

在 Polygon 实例上,Douglas-Peucker 算法独立应用于每个环。如果返回的 Polygon 实例无效,该方法将生成 FormatException;例如,如果应用 Reduce() 的目的在于简化实例中的每个环,而且所生成的环发生重叠,则会创建无效的 MultiPolygon 实例。

示例

使用 Reduce() 简化 LineString 实例

下面的示例创建一个 LineString 实例,并使用 Reduce() 来简化该实例。

DECLARE @g geometry;
SET @g = geometry::STGeomFromText('LINESTRING(0 0, 0 1, 1 0, 2 1, 3 0, 4 1)', 0);
SELECT @g.Reduce(.75).ToString();

显示丢失了原始起始点和结束点的一个示例

下面的示例说明生成的实例如何无法保留原始起始点和结束点。造成此情况的原因是保留原始起始点和结束点将导致无效的 LineString 实例。

DECLARE @g geometry = 'LINESTRING(0 0, 4 0, 2 .01, 1 0)';
DECLARE @h geometry = @g.Reduce(1);
SELECT @g.STIsValid() AS Valid
SELECT @g.ToString() AS Original, @h.ToString() AS Reduced;

请参阅

其他资源