Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Возвращает экземпляр geometry, представляющий набор всех точек, расстояние от которых до вызывающего экземпляра geometry меньше значения параметра distance или равно ему.
Применимо для следующих объектов: SQL Server (SQL Server 2012 по текущую версию), База данных SQL Windows Azure (С первоначального выпуска по текущий выпуск). |
Синтаксис
.BufferWithCurves ( distance )
Аргументы
- distance
Имеет тип float и указывает максимальное расстояние, на котором точки, составляющие буфер, могут находиться от экземпляра geometry.
Типы возвращаемых данных
Возвращаемый тип SQL Server: geometry
Возвращаемый тип CLR: SqlGeometry
Исключения
Следующие критерии вызовут исключение ArgumentException.
Методу, такому как @g.BufferWithCurves(), не передаются никакие параметры
Методу, например @g.BufferWithCurves('a'), передается нечисловой параметр
NULL передается методу, например @g.BufferWithCurves(NULL)
Замечания
На следующем рисунке показан пример экземпляра объекта геометрии (geometry), возвращенного этим методом.
.gif)
В следующей таблице показаны результаты, возвращенные для разных значений расстояния.
Значение расстояния |
Измерения типа |
Возвращенный пространственный тип |
|---|---|---|
расстояние < 0 |
Ноль или один |
Пустой экземпляр GeometryCollection |
расстояние < 0 |
Два и более |
Экземпляр CurvePolygon или GeometryCollection с отрицательным буфером Примечание Отрицательный буфер может создать пустой экземпляр GeometryCollection |
расстояние = 0 |
Все измерения |
Копия вызывающего экземпляра geometry |
расстояние > 0 |
Все измерения |
Экземпляр CurvePolygon или GeometryCollection |
Примечание
Поскольку аргумент distance относится к типу float, в расчетах очень маленькое значение может быть приравнено к нулю.Когда это происходит, возвращается копия вызывающего экземпляра geometry.См. раздел Типы данных float и real (Transact-SQL).
Отрицательный буфер удаляет все точки в пределах указанного расстояния от границы геометрического объекта. На следующей иллюстрации отрицательный буфер показан в виде области круга со светлой тенью. Пунктирная линия — это граница первоначального многоугольника, а сплошная линия — граница получаемого многоугольника.
Если методу передается параметр string , то он будет преобразован в тип float или возникнет исключение ArgumentException.
Примеры
А.Вызов метода BufferWithCurves() со значением параметра < 0 для экземпляра одномерного геометрического объекта
В следующем примере возвращается пустой экземпляр GeometryCollection:
DECLARE @g geometry= 'LINESTRING(3 4, 8 11)';
SELECT @g.BufferWithCurves(-1).ToString();
Б.Вызов метода BufferWithCurves() со значением параметра < 0 для экземпляра двумерного геометрического объекта
В следующем примере возвращается экземпляр CurvePolygon с отрицательным буфером:
DECLARE @g geometry = 'CURVEPOLYGON(COMPOUNDCURVE(CIRCULARSTRING(0 4, 4 0, 8 4), (8 4, 0 4)))';
SELECT @g.BufferWithCurves(-1).ToString()
В.Вызов функции BufferWithCurves() со значением параметра < 0, которая возвращает пустую коллекцию GeometryCollection
В следующем примере показано, что произойдет, если параметр distance равен -2.
DECLARE @g geometry = 'CURVEPOLYGON(COMPOUNDCURVE(CIRCULARSTRING(0 4, 4 0, 8 4), (8 4, 0 4)))';
SELECT @g.BufferWithCurves(-2).ToString();
Эта инструкция SELECT возвращает значение GEOMETRYCOLLECTION EMPTY
Г.Вызов функции BufferWithCurves() со значением параметра = 0
В следующем примере возвращается копия вызывающего экземпляра geometry:
DECLARE @g geometry = 'LINESTRING(3 4, 8 11)';
SELECT @g.BufferWithCurves(0).ToString();
Д.Вызов функции BufferWithCurves() с ненулевым, но очень малым значением параметра
В следующем примере также возвращается копия вызывающего экземпляра geometry:
DECLARE @g geometry = 'LINESTRING(3 4, 8 11)';
DECLARE @distance float = 1e-20;
SELECT @g.BufferWithCurves(@distance).ToString();
Е.Вызов функции BufferWithCurves() со значением параметра > 0
В следующем примере возвращается экземпляр CurvePolygon:
DECLARE @g geometry= 'LINESTRING(3 4, 8 11)';
SELECT @g.BufferWithCurves(2).ToString();
Ж.Передача допустимого строкового параметра
В следующем примере возвращается тот же экземпляр CurvePolygon, который упоминался ранее, но методу передается строковый параметр:
DECLARE @g geometry= 'LINESTRING(3 4, 8 11)';
SELECT @g.BufferWithCurves('2').ToString();
З.Передача недопустимого строкового параметра
В следующем примере возникнет ошибка:
DECLARE @g geometry = 'LINESTRING(3 4, 8 11)'
SELECT @g.BufferWithCurves('a').ToString();
Обратите внимание на то, что в предыдущих двух примерах передавался строковый литерал методу BufferWithCurves(). Первый пример будет работать, поскольку строковый литерал может быть преобразован в числовое значение. Но во втором примере возникнет исключение ArgumentException.
И.Вызов метода BufferWithCurves() для экземпляра объекта MultiPoint
Следующий пример возвращает два экземпляра GeometryCollection и один экземпляр CurvePolygon:
DECLARE @g geometry = 'MULTIPOINT((1 1),(1 4))';
SELECT @g.BufferWithCurves(1).ToString();
SELECT @g.BufferWithCurves(1.5).ToString();
SELECT @g.BufferWithCurves(1.6).ToString();
Первые две инструкции SELECT возвращают экземпляр GeometryCollection, поскольку параметр distance меньше или равен 1/2 от расстояния между точками (1 1) и (1 4). Третья инструкция SELECT возвращает экземпляр CurvePolygon, поскольку находящиеся в буфере экземпляры двух точек (1 1) и (1 4) перекрываются.