Reduce(geometry 数据类型)

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

语法

.Reduce ( tolerance )

参数

  • tolerance
    类型为 float 的值。 tolerance 是要为近似算法输入的公差。

返回类型

SQL Server 返回类型:geometry

CLR 返回类型: SqlGeometry

注释

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

此算法不修改 Point 实例。

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

Reduce() 为 CircularString 实例返回一个 LineString、CircularString 或 CompoundCurve 实例。 Reduce() 为 CompoundCurve 实例返回一个 CompoundCurve 或 LineString 实例。

在 Polygon 实例中,近似算法独立应用于每个环。 如果返回的 Polygon 实例无效,该方法将生成 FormatException;例如,如果应用 Reduce() 的目的在于简化实例中的每个环,而且所生成的环发生重叠,则会创建无效的 MultiPolygon 实例。 在具有外部环、没有内部环的 CurvePolygon 实例中,Reduce() 会返回 CurvePolygon、LineString 或 Point 实例。 如果 CurvePolygon 有内部环,则返回 CurvePolygon 或 MultiPoint 实例。

遇到圆弧段时,近似算法会检查是否可以通过在给定公差一半之内的弦来近似弧。 如果弦满足此条件,计算中会用该弦来替换圆弧。 如果弦不满足此条件,则保留圆弧,并将近似算法应用于其余的段。

示例

A.使用 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();

B.对 CircularString 使用具有不同公差级别的 Reduce()

下面的示例对 CircularString 实例使用具有三个公差级别的 Reduce():

DECLARE @g geometry = 'CIRCULARSTRING(0 0, 8 8, 16 0, 20 -4, 24 0)';

SELECT @g.Reduce(5).ToString();

SELECT @g.Reduce(15).ToString();

SELECT @g.Reduce(16).ToString();

此示例生成以下输出:

CIRCULARSTRING (0 0, 8 8, 16 0, 20 -4, 24 0)

COMPOUNDCURVE (CIRCULARSTRING (0 0, 8 8, 16 0), (16 0, 24 0))

LINESTRING (0 0, 24 0)

返回的每个实例都包含端点 (0 0) 和 (24 0)。

C.对 CompoundCurve 使用具有不同公差级别的 Reduce()

下面的示例对 CompoundCurve 实例使用具有两个公差级别的 Reduce():

DECLARE @g geometry = 'COMPOUNDCURVE(CIRCULARSTRING(0 0, 8 8, 16 0, 20 -4, 24 0),(24 0, 20 4, 16 0))';

SELECT @g.Reduce(15).ToString();

SELECT @g.Reduce(16).ToString();

在此示例中请注意,第二个 SELECT 语句返回 LineString 实例:LineString(0 0, 16 0)。

显示原始起点和终点丢失的示例

下面的示例演示生成的实例为何无法保留原始的起点和终点。 这是因为保留原始的起点和终点将产生无效的 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;

请参阅

其他资源

扩展静态几何图形方法