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

Применимо к:SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure

Возвращает экземпляр geometry, представляющий набор всех точек, расстояние которых от вызывающего экземпляра geometry меньше параметра distance или равно ему.

Синтаксис

.BufferWithCurves ( distance )  

Примечание.

Сведения о синтаксисе Transact-SQL для SQL Server 2014 (12.x) и более ранних версиях см . в документации по предыдущим версиям.

Аргументы

distance
Имеет тип float и указывает максимальное расстояние, на котором точки, составляющие буфер, могут находиться от экземпляра geometry.

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

Тип возвращаемых данных SQL Server: geometry

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

Исключения

Следующие критерии вызовут исключение ArgumentException.

  • Методу, такому как @g.BufferWithCurves(), не передаются никакие параметры

  • Методу, например @g.BufferWithCurves('a'), передается нечисловой параметр

  • NULL передается методу, например @g.BufferWithCurves(NULL)

Замечания

На следующем рисунке показан пример экземпляра объекта геометрии (geometry), возвращенного этим методом.

Diagram showing an example of a geometry instance returned by this method.

В следующей таблице показаны результаты, возвращенные для разных значений расстояния.

Значение расстояния Измерения типа Возвращенный пространственный тип
расстояние < 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(); 

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();

Д. Вызов функции 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) перекрываются.

См. также

Расширенные методы экземпляров Geometry