Reduce (тип данных geometry)

Возвращает приблизительное значение для указанного экземпляра geometry, полученное по алгоритму Дугласа — Пекера для экземпляра с заданным допуском.

Синтаксис

                .Reduce ( tolerance )

Аргумент

  • tolerance
    Представляет собой значение типа float. Аргумент tolerance представляет собой допуск, который должен быть введен в алгоритм Дугласа-Пекера.

Тип возвращаемых данных

Возвращаемый тип SQL Server: geometry

Возвращаемый тип CLR: SqlGeometry

Замечания

Для типов коллекции этот алгоритм работает независимо для каждого экземпляра geometry, содержащегося в экземпляре.

Этот алгоритм не изменяет экземпляры Point.

Для экземпляров LineString алгоритм Дугласа — Пекера сохраняет исходные начальную и конечную точки экземпляра и алгоритм итеративно выполняет суммирование в обратном направлении — от точки, начиная с которой исходный экземпляр в наибольшей степени отклоняется от результата, до точки, в которой отклонение становится меньше заданного допуска.

ПредупреждениеВнимание!

Использование алгоритма Дугласа — Пекера может сделать экземпляр LineString недопустимым, но метод Reduce будет внутренним образом вызывать метод MakeValid в полученном экземпляре. Это может привести к удалению исходных начальной и конечной точек из полученного экземпляра. Пример см. в разделе Showing an example where the original start and end points are lost.

Для экземпляров Polygon алгоритм Дугласа — Пекера применяется независимо к каждому кольцу. Этот метод вызывает исключение FormatException, если возвращаемый экземпляр Polygon является недопустимым. Недопустимый экземпляр MultiPolygon создается, например, если применяется метод Reduce() в целях упрощения каждого кольца в экземпляре, но результирующие кольца перекрываются.

Примеры

Упрощения экземпляра LineString методом Reduce()

В следующем примере создается экземпляр 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;