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;
Внимание!