Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Применимо к:SQL Server
Azure SQL База данных
Azure SQL Управляемый экземпляр
SQL База данных в Microsoft Fabric
Возвращает геометрический объект, представляющий объединение всех точек, расстояние которых от экземпляра geometry меньше или равно указанному значению.
Syntax
.STBuffer ( distance )
Arguments
distance
Значение типа float (double в .NET Framework), указывающее расстояние от геометрического объекта, вокруг которого вычисляется буфер.
Типы возвращаемых данных
Тип возвращаемых данных SQL Server: geometry
Тип возвращаемых данных CLR: SqlGeometry
Remarks
Метод STBuffer() вычисляет буфер аналогично методу BufferWithTolerance, задавая аргументы tolerance = distance × 0,001 и relative = false.
Если distance> 0, возвращается экземпляр Polygon или MultiPolygon.
Note
Поскольку аргумент distance относится к типу float, в расчетах очень маленькое значение может быть приравнено к нулю. Когда это происходит, возвращается экземпляр geometry. См. раздел Типы данных float и real (Transact-SQL).
Когда distance = 0, возвращается копия вызывающего экземпляра geometry.
Если distance< 0, то:
возвращается пустой экземпляр GeometryCollection, если измерения экземпляра — 0 или 1.
возвращается отрицательный буфер, если измерения экземпляра — 2 или более.
Note
Отрицательный буфер может также создать пустой экземпляр GeometryCollection.
Отрицательный буфер удаляет все точки в пределах указанного расстояния от границы геометрического объекта.
Ошибкой между теоретическим и вычисляемым буфером является max(tolerance, extents * 1.E-7), где tolerance = distance * 0,001. Дополнительные сведения об экстентах см. в статье Справочник по методам типа данных geometry.
Examples
A. Вызов метода 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();
Note
Возвращается экземпляр 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..
E. Вызов метода 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();
Note
В предыдущих двух примерах методу 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