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

Область применения: yesSQL Server (все поддерживаемые версии) YesБаза данных SQL Azure YesУправляемый экземпляр SQL Azure

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

Синтаксис

  
.STBuffer ( distance )  

Примечание

Ссылки на описание синтаксиса Transact-SQL для SQL Server 2014 и более ранних версий, см. в статье Документация по предыдущим версиям.

Аргументы

distance
Значение типа float (double в .NET Framework), указывающее расстояние от геометрического объекта, вокруг которого вычисляется буфер.

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

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

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

Remarks

Метод STBuffer() вычисляет буфер аналогично методу BufferWithTolerance, задавая аргументы tolerance = distance × 0,001 и relative = false.

Если distance> 0, возвращается экземпляр Polygon или MultiPolygon.

Примечание

Поскольку аргумент distance относится к типу float, в расчетах очень маленькое значение может быть приравнено к нулю. Когда это происходит, возвращается экземпляр geometry. См. раздел Типы данных float и real (Transact-SQL).

Когда distance = 0, возвращается копия вызывающего экземпляра geometry.

Если distance< 0, то:

  • возвращается пустой экземпляр GeometryCollection, если измерения экземпляра — 0 или 1.

  • возвращается отрицательный буфер, если измерения экземпляра — 2 или более.

    Примечание

    Отрицательный буфер может также создать пустой экземпляр GeometryCollection.

Отрицательный буфер удаляет все точки в пределах указанного расстояния от границы геометрического объекта.

Ошибка между теоретическим и вычисляемым буфером вычисляется по формуле max(tolerance, extents * 1.E-7), где tolerance = distance * 0,001. Дополнительные сведения об экстентах см. в статье Справочник по методам типа данных geometry.

Примеры

A. Вызов метода STBuffer() с parameter_value < 0 для экземпляра одномерного геометрического объекта

В следующем примере возвращается пустой экземпляр GeometryCollection:

 DECLARE @g geometry= 'LINESTRING(3 4, 8 11)'; 
 SELECT @g.STBuffer(-1).ToString();

Б. Вызов метода STBuffer() с parameter_value < 0 для экземпляра объекта Polygon

В следующем примере возвращается экземпляр Polygon с отрицательным буфером:

 DECLARE @g geometry = 'POLYGON((1 1, 1 5, 5 5, 5 1, 1 1))'; 
 SELECT @g.STBuffer(-1).ToString();

В. Вызов метода STBuffer() с parameter_value < 0 для экземпляра объекта CurvePolygon

В следующем примере возвращается экземпляр Polygon с отрицательным буфером из экземпляра CurvePolygon:

 DECLARE @g geometry = 'CURVEPOLYGON(COMPOUNDCURVE(CIRCULARSTRING(0 4, 4 0, 8 4), (8 4, 0 4)))'; 
 SELECT @g.STBuffer(-1).ToString();

Примечание

Возвращается экземпляр Polygon вместо экземпляра CurvePolygon. Чтобы возвращать экземпляр CurvePolygon, воспользуйтесь статьей BufferWithCurves (тип данных geometry).

Г. Вызов метода STBuffer() с отрицательным значением параметра, возвращающего пустой экземпляр

В следующем примере показано, что произойдет, если параметр distance равен –2 для предыдущего примера.

 DECLARE @g geometry = 'CURVEPOLYGON(COMPOUNDCURVE(CIRCULARSTRING(0 4, 4 0, 8 4), (8 4, 0 4)))'; 
 SELECT @g.STBuffer(-2).ToString();

Эта инструкция SELECT возвращает значение GEOMETRYCOLLECTION EMPTY..

Д. Вызов метода STBuffer() с parameter_value = 0

В следующем примере возвращается копия вызывающего экземпляра geometry:

 DECLARE @g geometry = 'LINESTRING(3 4, 8 11)'; 
 SELECT @g.STBuffer(0).ToString();

Е. Вызов метода STBuffer() с ненулевым, но очень малым значением параметра

В следующем примере также возвращается копия вызывающего экземпляра geometry:

 DECLARE @g geometry = 'LINESTRING(3 4, 8 11)';  
 DECLARE @distance float = 1e-20;  
 SELECT @g.STBuffer(@distance).ToString();

Ж. Вызов метода STBuffer() с parameter_value > 0

В следующем примере возвращается экземпляр Polygon:

 DECLARE @g geometry= 'LINESTRING(3 4, 8 11)'; 
 SELECT @g.STBuffer(2).ToString();

З. Вызов метода STBuffer() со строковым значением параметра

В следующем примере возвращается тот же экземпляр Polygon, который упоминался ранее, но методу передается строковый параметр:

 DECLARE @g geometry= 'LINESTRING(3 4, 8 11)'; 
 SELECT @g.STBuffer('2').ToString();

В следующем примере возникнет ошибка:

 DECLARE @g geometry = 'LINESTRING(3 4, 8 11)'; 
 SELECT @g.STBuffer('a').ToString();

Примечание

В предыдущих двух примерах методу STBuffer() был передан строковый литерал. Первый пример будет работать, поскольку строковый литерал может быть преобразован в числовое значение. Но во втором примере возникнет исключение ArgumentException.

И. Вызов метода STBuffer() для экземпляра объекта MultiPoint

Следующий пример возвращает два экземпляра MultiPolygon и один экземпляр Polygon:

 DECLARE @g geometry = 'MULTIPOINT((1 1),(1 4))'; 
 SELECT @g.STBuffer(1).ToString(); 
 SELECT @g.STBuffer(1.5).ToString(); 
 SELECT @g.STBuffer(1.6).ToString();

Первые две инструкции SELECT возвращают экземпляр MultiPolygon, поскольку параметр distance меньше или равен 1/2 расстояния между двумя точками (1 1) и (1 4). Третья инструкция SELECT возвращает экземпляр Polygon, поскольку находящиеся в буферной памяти экземпляры двух точек (1 1) и (1 4) перекрываются.

См. также:

BufferWithTolerance (тип данных geometry)
Методы OGC в экземплярах Geometry