STBuffer (тип данных geometry)
Область применения: SQL Server
База данных SQL Azure
Управляемый экземпляр SQL Azure
базе данных SQL в Microsoft Fabric
Возвращает геометрический объект, представляющий объединение всех точек, расстояние которых от экземпляра geometry меньше или равно указанному значению.
Синтаксис
.STBuffer ( distance )
Аргументы
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();
В. Вызов метода 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