Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
A CircularString — это коллекция нулевых или более непрерывных сегментов круговой дуги. Сегмент круговой дуги — это изогнутый сегмент, определенный тремя точками в двухмерной плоскости; первая точка не может совпадать с третьей точкой. Если все три точки круговой дуги являются коллинарными, сегмент дуги рассматривается как сегмент линии.
Это важно
Для получения подробного описания и примеров новых пространственных функций, представленных в SQL Server 2012, включая CircularString подтип, скачайте технический документ Новые пространственные функции в SQL Server 2012.
Экземпляры CircularString
На рисунке ниже показаны допустимые CircularString примеры.
Принятые случаи
Экземпляр CircularString принимается, если он пустой или содержит нечетное количество точек, n, где n > 1. Принимаются следующие CircularString варианты.
DECLARE @g1 geometry = 'CIRCULARSTRING EMPTY';
DECLARE @g2 geometry = 'CIRCULARSTRING(1 1, 2 0, -1 1)';
DECLARE @g3 geometry = 'CIRCULARSTRING(1 1, 2 0, 2 0, 2 0, 1 1)';
@g3 показывает, что CircularString экземпляр может быть принят, но недопустим. Следующее объявление экземпляра CircularString не принимается. Это объявление выбрасывает System.FormatException.
DECLARE @g geometry = 'CIRCULARSTRING(1 1, 2 0, 2 0, 1 1)';
Допустимые экземпляры
Допустимый CircularString экземпляр должен быть пустым или иметь следующие атрибуты:
Он должен содержать по крайней мере один сегмент круговой дуги (т. е. имеет не менее трех точек).
Последняя конечная точка для каждого сегмента круговой дуги в последовательности, за исключением последнего сегмента, должна быть первой конечной точкой для следующего сегмента в последовательности.
Он должен иметь нечетное количество точек.
Он не может перекрываться в пределах интервала.
Хотя
CircularStringэкземпляры могут содержать сегменты линий, эти сегменты линий должны определяться тремя коллинеарными точками.
В следующем примере продемонстрированы допустимые CircularString случаи.
DECLARE @g1 geometry = 'CIRCULARSTRING EMPTY';
DECLARE @g2 geometry = 'CIRCULARSTRING(1 1, 2 0, -1 1)';
DECLARE @g3 geometry = 'CIRCULARSTRING(1 1, 2 0, 2 0, 1 1, 0 1)';
DECLARE @g4 geometry = 'CIRCULARSTRING(1 1, 2 2, 2 2)';
SELECT @g1.STIsValid(), @g2.STIsValid(), @g3.STIsValid(),@g4.STIsValid();
Экземпляр CircularString должен содержать не менее двух сегментов круговой дуги, чтобы определить полный круг.
CircularString Экземпляр не может использовать один сегмент круговой дуги (например, (1 1, 3 1, 1 1)) для определения полного круга. Используйте (1 1, 2 2, 3 1, 2 0, 1 1) для определения круга.
В следующем примере показаны недопустимые экземпляры CircularString.
DECLARE @g1 geometry = 'CIRCULARSTRING(1 1, 2 0, 1 1)';
DECLARE @g2 geometry = 'CIRCULARSTRING(0 0, 0 0, 0 0)';
SELECT @g1.STIsValid(), @g2.STIsValid();
Экземпляры с коллинеарными точками
В следующих случаях сегмент круговой дуги будет рассматриваться как сегмент линии:
Если все три пункта являются коллинаром (например, (1 3, 4 4, 7 5)).
Когда первая и средняя точка совпадают, но третья точка отличается (например, (1 3, 1 3, 7 5)).
Когда средняя и последняя точка совпадают, но первая точка отличается (например, (1 3, 4, 4 4)).
Примеры
А. Создание экземпляра геометрии с помощью пустого циклическогоstring
В этом примере показано, как создать пустой CircularString экземпляр:
DECLARE @g geometry;
SET @g = geometry::Parse('CIRCULARSTRING EMPTY');
В. Создание экземпляра геометрической фигуры с помощью CircularString с одним сегментом круговой дуги.
В следующем примере показано, как создать CircularString экземпляр с одним сегментом круговой дуги (половина круга):
DECLARE @g geometry;
SET @g = geometry:: STGeomFromText('CIRCULARSTRING(2 0, 1 1, 0 0)', 0);
SELECT @g.ToString();
С. Создание экземпляра геометрии с помощью circularString с несколькими сегментами круговой дуги
В следующем примере показано, как создать CircularString экземпляр с несколькими сегментами круговой дуги (полный круг):
DECLARE @g geometry;
SET @g = geometry::Parse('CIRCULARSTRING(2 1, 1 2, 0 1, 1 0, 2 1)');
SELECT 'Circumference = ' + CAST(@g.STLength() AS NVARCHAR(10));
При этом выводятся следующие выходные данные:
Circumference = 6.28319
Сравните выходные данные, если LineString используется вместо CircularString:
DECLARE @g geometry;
SET @g = geometry::STGeomFromText('LINESTRING(2 1, 1 2, 0 1, 1 0, 2 1)', 0);
SELECT 'Perimeter = ' + CAST(@g.STLength() AS NVARCHAR(10));
При этом выводятся следующие выходные данные:
Perimeter = 5.65685
Обратите внимание, что значение для CircularString примера близко к 2π (2 * pi), что является фактической окружностью круга.
Д. Объявление и создание экземпляра геометрии с CircularString в одном операторе
В этом фрагменте показано, как объявить и создать экземпляр geometry с помощью CircularString в одной инструкции.
DECLARE @g geometry = 'CIRCULARSTRING(0 0, 1 2.1082, 3 6.3246, 0 7, -3 6.3246, -1 2.1082, 0 0)';
Е. Создание экземпляра географического объекта с помощью CircularString
В следующем примере показано, как объявить и создать экземпляр geography с помощью CircularString.
DECLARE @g geography = 'CIRCULARSTRING(-122.358 47.653, -122.348 47.649, -122.348 47.658, -122.358 47.658, -122.358 47.653)';
F. Создание экземпляра геометрической структуры с CircularString в виде прямой линии
В следующем примере показано, как создать объект CircularString, представляющий собой прямую линию.
DECLARE @g geometry;
SET @g = geometry::STGeomFromText('CIRCULARSTRING(0 0, 1 2, 2 4)', 0);
См. также
Общие сведения о типах пространственных данных CompoundCurveMakeValid (географический тип данных)MakeValid (геометрический тип данных)STIsValid (геометрический тип данных)STIsValid (географический тип данных)STLength (геометрический тип данных)STStartPoint (геометрический тип данных)STEndpoint (геометрический тип данных)STPointN (геометрический тип данных)STNumPoints (геометрический тип данных)STIsRing (геометрический тип данных)STIsClosed (геометрический тип данных)STPointOnSurface (геометрический тип данных)LineString