Поделиться через


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)

Другие ресурсы

Методы OGC в экземплярах Geometry