Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Применимо к:SQL Server
База данных
SQL AzureУправляемый экземпляр
SQL AzureБаза данных SQL в Microsoft Fabric
Возвращает экземпляр geometry, представляющий набор всех точек, расстояние которых от вызывающего экземпляра geometry меньше параметра distance или равно ему.
Syntax
.BufferWithCurves ( distance )
Arguments
distance
Имеет тип float и указывает максимальное расстояние, на котором точки, составляющие буфер, могут находиться от экземпляра geometry.
Типы возвращаемых данных
Тип возвращаемых данных SQL Server: geometry
Тип возвращаемых данных CLR: SqlGeometry
Exceptions
Следующие критерии вызовут исключение ArgumentException.
Методу, такому как
@g.BufferWithCurves(), не передаются никакие параметрыМетоду, например
@g.BufferWithCurves('a'), передается нечисловой параметрNULL передается методу, например
@g.BufferWithCurves(NULL)
Remarks
На следующем рисунке показан пример экземпляра объекта геометрии (geometry), возвращенного этим методом.
В следующей таблице показаны результаты, возвращенные для разных значений расстояния.
| Значение расстояния | Размеры типа | Возвращенный пространственный тип |
|---|---|---|
| расстояние < 0 | Ноль или один | Пустой экземпляр GeometryCollection |
| расстояние < 0 | Два и более | Экземпляр CurvePolygon или GeometryCollection с отрицательным буфером. Примечание. Отрицательный буфер может создать пустой экземпляр GeometryCollection |
| расстояние = 0 | Все измерения | Копия вызывающего экземпляра geometry |
| расстояние > 0 | Все измерения | Экземпляр CurvePolygon или GeometryCollection |
Note
Поскольку аргумент distance относится к типу float, в расчетах очень маленькое значение может быть приравнено к нулю. Когда это происходит, возвращается копия вызывающего экземпляра geometry. См. раздел Типы данных float и real (Transact-SQL).
Отрицательный буфер удаляет все точки в пределах указанного расстояния от границы геометрического объекта. На следующей иллюстрации отрицательный буфер показан в виде области круга со светлой тенью. Пунктирная линия — это граница первоначального многоугольника, а сплошная линия — граница получаемого многоугольника.
Если методу передается параметр string, то он будет преобразован в тип float или возникнет исключение ArgumentException.
Examples
A. Вызов метода BufferWithCurves() со значением параметра < 0 для экземпляра одномерного геометрического объекта
В следующем примере возвращается пустой экземпляр GeometryCollection:
DECLARE @g geometry= 'LINESTRING(3 4, 8 11)';
SELECT @g.BufferWithCurves(-1).ToString();
B. Вызов метода BufferWithCurves() со значением параметра < 0 для экземпляра двумерного геометрического объекта
В следующем примере возвращается экземпляр CurvePolygon с отрицательным буфером:
DECLARE @g geometry = 'CURVEPOLYGON(COMPOUNDCURVE(CIRCULARSTRING(0 4, 4 0, 8 4), (8 4, 0 4)))';
SELECT @g.BufferWithCurves(-1).ToString()
C. Вызов функции 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
D. Вызов функции BufferWithCurves() со значением параметра = 0
В следующем примере возвращается копия вызывающего экземпляра geometry:
DECLARE @g geometry = 'LINESTRING(3 4, 8 11)';
SELECT @g.BufferWithCurves(0).ToString();
E. Вызов функции BufferWithCurves() с ненулевым, но очень малым значением параметра
В следующем примере также возвращается копия вызывающего экземпляра geometry:
DECLARE @g geometry = 'LINESTRING(3 4, 8 11)';
DECLARE @distance float = 1e-20;
SELECT @g.BufferWithCurves(@distance).ToString();
F. Вызов функции BufferWithCurves() со значением параметра > 0
В следующем примере возвращается экземпляр CurvePolygon:
DECLARE @g geometry= 'LINESTRING(3 4, 8 11)';
SELECT @g.BufferWithCurves(2).ToString();
G. Передача допустимого строкового параметра
В следующем примере возвращается тот же экземпляр CurvePolygon, который упоминался ранее, но методу передается строковый параметр:
DECLARE @g geometry= 'LINESTRING(3 4, 8 11)';
SELECT @g.BufferWithCurves('2').ToString();
H. Передача недопустимого строкового параметра
В следующем примере возникнет ошибка:
DECLARE @g geometry = 'LINESTRING(3 4, 8 11)'
SELECT @g.BufferWithCurves('a').ToString();
Обратите внимание на то, что в предыдущих двух примерах передавался строковый литерал методу BufferWithCurves(). Первый пример будет работать, поскольку строковый литерал может быть преобразован в числовое значение. Но во втором примере возникнет исключение ArgumentException.
I. Вызов метода 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) перекрываются.