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


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

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

Синтаксис

.BufferWithCurves ( distance )

Аргументы

  • distance
    Имеет тип float и указывает максимальное расстояние, на котором точки, составляющие буфер, могут находиться от экземпляра geometry.

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

Возвращаемый тип SQL Server: geometry

Возвращаемый тип CLR: SqlGeometry

Исключения

Следующие критерии вызовут исключение ArgumentException.

  • Методу, такому как @g.BufferWithCurves(), не передаются никакие параметры

  • Методу, например @g.BufferWithCurves('a'), передается нечисловой параметр

  • NULL передается методу, например @g.BufferWithCurves(NULL)

Замечания

На следующем рисунке показан пример экземпляра объекта геометрии (geometry), возвращенного этим методом.

BufferedCurve

В следующей таблице показаны результаты, возвращенные для разных значений расстояния.

Значение расстояния

Измерения типа

Возвращенный пространственный тип

расстояние < 0

Ноль или один

Пустой экземпляр GeometryCollection

расстояние < 0

Два и более

Экземпляр CurvePolygon или GeometryCollection с отрицательным буфером

ПримечаниеПримечание

Отрицательный буфер может создать пустой экземпляр GeometryCollection

расстояние = 0

Все измерения

Копия вызывающего экземпляра geometry

расстояние > 0

Все измерения

Экземпляр CurvePolygon или GeometryCollection

ПримечаниеПримечание

Поскольку аргумент distance относится к типу float, в расчетах очень маленькое значение может быть приравнено к нулю. Когда это происходит, возвращается копия вызывающего экземпляра geometry. См. раздел Типы данных float и real (Transact-SQL).

Отрицательный буфер удаляет все точки в пределах указанного расстояния от границы геометрического объекта. На следующей иллюстрации отрицательный буфер показан в виде области круга со светлой тенью. Пунктирная линия — это граница первоначального многоугольника, а сплошная линия — граница получаемого многоугольника.

Если методу передается параметр string , то он будет преобразован в тип float или возникнет исключение ArgumentException.

Примеры

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

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

DECLARE @g geometry= 'LINESTRING(3 4, 8 11)';

SELECT @g.BufferWithCurves(-1).ToString();

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

В следующем примере возвращается экземпляр CurvePolygon с отрицательным буфером:

DECLARE @g geometry = 'CURVEPOLYGON(COMPOUNDCURVE(CIRCULARSTRING(0 4, 4 0, 8 4), (8 4, 0 4)))';

SELECT @g.BufferWithCurves(-1).ToString()

В.Вызов функции BufferWithCurves() со значением параметра < 0, которая возвращает пустую коллекцию GeometryCollection

В следующем примере показано, что произойдет, если параметр distance равен -2.

DECLARE @g geometry = 'CURVEPOLYGON(COMPOUNDCURVE(CIRCULARSTRING(0 4, 4 0, 8 4), (8 4, 0 4)))';

SELECT @g.BufferWithCurves(-2).ToString();

Эта инструкция SELECT возвращает значение GEOMETRYCOLLECTION EMPTY

Г.Вызов функции BufferWithCurves() со значением параметра = 0

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

DECLARE @g geometry = 'LINESTRING(3 4, 8 11)';

SELECT @g.BufferWithCurves(0).ToString();

Д.Вызов функции BufferWithCurves() с ненулевым, но очень малым значением параметра

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

DECLARE @g geometry = 'LINESTRING(3 4, 8 11)';

DECLARE @distance float = 1e-20;

SELECT @g.BufferWithCurves(@distance).ToString();

Е.Вызов функции BufferWithCurves() со значением параметра > 0

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

DECLARE @g geometry= 'LINESTRING(3 4, 8 11)';

SELECT @g.BufferWithCurves(2).ToString();

Ж.Передача допустимого строкового параметра

В следующем примере возвращается тот же экземпляр CurvePolygon, который упоминался ранее, но методу передается строковый параметр:

DECLARE @g geometry= 'LINESTRING(3 4, 8 11)';

SELECT @g.BufferWithCurves('2').ToString();

З.Передача недопустимого строкового параметра

В следующем примере возникнет ошибка:

DECLARE @g geometry = 'LINESTRING(3 4, 8 11)'

SELECT @g.BufferWithCurves('a').ToString();

Обратите внимание на то, что в предыдущих двух примерах передавался строковый литерал методу BufferWithCurves(). Первый пример будет работать, поскольку строковый литерал может быть преобразован в числовое значение. Но во втором примере возникнет исключение ArgumentException.

И.Вызов метода BufferWithCurves() для экземпляра объекта MultiPoint

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

DECLARE @g geometry = 'MULTIPOINT((1 1),(1 4))';

SELECT @g.BufferWithCurves(1).ToString();

SELECT @g.BufferWithCurves(1.5).ToString();

SELECT @g.BufferWithCurves(1.6).ToString();

Первые две инструкции SELECT возвращают экземпляр GeometryCollection, поскольку параметр distance меньше или равен 1/2 от расстояния между точками (1 1) и (1 4). Третья инструкция SELECT возвращает экземпляр CurvePolygon, поскольку находящиеся в буфере экземпляры двух точек (1 1) и (1 4) перекрываются.

См. также

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

Расширенные методы экземпляров Geometry