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

Применяется к:SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure Управляемый экземпляр SQL Azure sql analytics в хранилище Microsoft Fabricв Microsoft Fabric

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

Синтаксис

  
.STBuffer ( distance )  

Примечание.

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

Аргументы

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

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

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

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

Замечания

Метод 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.

Примеры

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

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

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

B. Вызов метода 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();

C. Вызов метода 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).

D. Вызов метода 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();

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

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

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

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

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

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

H. Вызов метода 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.

I. Вызов метода 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