CurveToLineWithTolerance (тип данных geometry)
Возвращает приближение из многоугольников для экземпляра geometry, содержащего сегменты дуги.
Синтаксис
.CurveToLineWithTolerance ( tolerance, relative )
Аргументы
tolerance
Выражение типа double, которое определяет максимальную ошибку между исходным сегментом дуги и его линейной аппроксимацией.relative
Представляет собой выражение bool, указывающее, следует ли использовать относительный максимум для отклонения. Когда для относительного параметра задается значение false (0), для абсолютного максимума устанавливается значение, равное возможному отклонению линейной аппроксимации. Если для относительного параметра задано значение true, то вычисляется погрешность, равная произведению параметра tolerance на диаметр ограничивающего прямоугольника для пространственного объекта.
Типы возвращаемых данных
Возвращаемый тип SQL Server: geometry
Возвращаемый тип CLR: SqlGeometry
Исключения
При задании tolerance <= 0 возникает исключение ArgumentOutOfRange.
Замечания
В этом методе можно указывать допустимое количество ошибок для результирующего объекта LineString.
В следующей таблице показан тип экземпляра, который возвращается методом CurveToLineWithTolerance() для различных типов.
Тип вызывающего экземпляра |
Возвращенный пространственный тип |
---|---|
Пустой экземпляр геометрического объекта |
Пустой экземпляр GeometryCollection |
Point и MultiPoint |
Экземпляр Point |
MultiPoint |
Экземпляр Point или MultiPoint |
CircularString, CompoundCurve или LineString |
Экземпляр LineString |
MultiLineString |
Экземпляр LineString или MultiLineString |
CurvePolygon и Polygon |
Экземпляр Polygon |
MultiPolygon |
Экземпляр Polygon или MultiPolygon |
GeometryCollection с одним экземпляром, который не содержит сегмент дуги |
Экземпляр, который находится в коллекции GeometryCollection, определяет тип возвращаемого экземпляра. |
GeometryCollection с одним экземпляром одномерного сегмента дуги (CircularString, CompoundCurve) |
Экземпляр LineString |
GeometryCollection с одним экземпляром двухмерного сегмента дуги (CurvePolygon) |
Экземпляр Polygon |
GeometryCollection с несколькими одномерными экземплярами |
Экземпляр MultiLineString |
GeometryCollection с несколькими двухмерными экземплярами |
Экземпляр MultiPolygon |
GeometryCollection с несколькими экземплярами разных размерностей |
Экземпляр GeometryCollection |
Примеры
А.Использование различных значений погрешности в экземпляре CircularString
Следующий пример показывает, каким образом задание погрешности влияет на экземпляр LineString , возвращаемый из экземпляра CircularString:
DECLARE @g geometry;
SET @g = geometry::Parse('CIRCULARSTRING(0 0, 1 2.1082, 3 6.3246, 0 7, -3 6.3246, -1 2.1082, 0 0)');
SELECT @g.CurveToLineWithTolerance(0.1,0).STNumPoints(), @g.CurveToLineWithTolerance(0.01, 0).STNumPoints();
Б.Использование метода в экземпляре MultiLineString, содержащем один элемент LineString
Следующий пример показывает, что возвращается из экземпляра MultiLineString, который содержит только один экземпляр LineString:
DECLARE @g geometry;
SET @g = geometry::Parse('MULTILINESTRING((1 3, 4 8, 6 9))');
SELECT @g.CurveToLineWithTolerance(0.1,0).ToString();
В.Использование метода в экземпляре MultiLineString, содержащем несколько элементов LineString
Следующий пример показывает, что возвращается из экземпляра MultiLineString, который содержит более одного экземпляра LineString:
DECLARE @g geometry;
SET @g = geometry::Parse('MULTILINESTRING((1 3, 4 8, 6 9),(4 4, 9 18))');
SELECT @g.CurveToLineWithTolerance(0.1,0).ToString();
Г.Установка параметра relative в значение true для вызова экземпляра CurvePolygon
В следующем примере используется экземпляр CurvePolygon для вызова CurveToLineWithTolerance() с параметром relative, имеющим значение true:
DECLARE @g geometry = 'CURVEPOLYGON(COMPOUNDCURVE(CIRCULARSTRING(0 4, 4 0, 8 4), (8 4, 0 4)))';
SELECT @g.CurveToLineWithTolerance(.5,1).ToString();
Д.Использование метода с экземпляром GeometryCollection
В следующем примере метод CurveToLineWithTolerance() вызывается для коллекции GeometryCollection, которая содержит двухмерный экземпляр CurvePolygon и одномерный экземпляр CircularString. Метод CurveToLineWithTolerance() преобразует оба типа сегментов дуги в типы линейных сегментов и возвращает их в виде типа GeometryCollection.
DECLARE @g geometry;
SET @g = geometry::Parse('GEOMETRYCOLLECTION(CURVEPOLYGON( COMPOUNDCURVE(CIRCULARSTRING(0 2, 2 0, 4 2), (4 2, 0 2))), CIRCULARSTRING(4 4, 8 6, 9 5))');
SELECT @g.CurveToLineWithTolerance(0.1,0).STNumPoints(), @g.CurveToLineWithTolerance(0.1, 0).ToString();