STBuffer (тип данных geometry)
Возвращает геометрический объект, представляющий объединение всех точек, расстояние которых от экземпляра geometry меньше или равно указанному значению.
Синтаксис
.STBuffer ( distance )
Аргумент
- distance
Значение типа float (double в .NET Framework), указывающее расстояние от геометрического объекта, вокруг которого вычисляется буфер.
Тип возвращаемых данных
Возвращаемый тип SQL Server: geometry
Возвращаемый тип CLR: SqlGeometry
Замечания
Метод STBuffer() вычисляет буфер аналогично методу BufferWithTolerance, задавая аргументы tolerance = distance * .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 * .001. Дополнительные сведения о параметре extents см. в разделе Справочник по методам типа данных geometry.
Примеры
А.Вызов метода 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)