Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Применимо к:SQL Server
База данных Azure SQL
Управляемый экземпляр Azure SQL
Конечная точка аналитики SQL в Microsoft Fabric
Хранилище в Microsoft Fabric
База данных SQL в Microsoft Fabric
Объект CircularString — это коллекция, состоящая из нуля или большего количества непрерывных круговых сегментов дуги. Сегмент дуги — это сегмент кривой, определяемый тремя точками на двумерной плоскости; первая точка не может совпадать с третьей. Если все три точки сегмента дуги лежат на одной прямой, сегмент дуги считается линейным сегментом.
Экземпляры 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 4)).
Examples
A. Создание экземпляра геометрии с пустым циклическимstring
В этом примере показано, как создать пустой экземпляр CircularString :
DECLARE @g geometry;
SET @g = geometry::Parse('CIRCULARSTRING EMPTY');
B. Создание экземпляра геометрии с помощью циклическогоstring с одним сегментом круговой дуги
В следующем примере показывается создание экземпляра CircularString с одним сегментом дуги (полукруга):
DECLARE @g geometry;
SET @g = geometry:: STGeomFromText('CIRCULARSTRING(2 0, 1 1, 0 0)', 0);
SELECT @g.ToString();
C. Создание экземпляра геометрического экземпляра с помощью 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∏, что является фактической окружностью круга.
D. Объявление и создание экземпляра геометрического экземпляра с помощью 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)';
E. Создание экземпляра географического экземпляра с помощью 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 , представляющего прямую:
DECLARE @g geometry;
SET @g = geometry::STGeomFromText('CIRCULARSTRING(0 0, 1 2, 2 4)', 0);
Связанный контент
- Основные сведения о типах пространственных данных
- CompoundCurve
- MakeValid (тип данных geography)
- MakeValid (тип данных geometry)
- STIsValid (тип данных geometry)
- STIsValid (тип данных geography)
- STLength (тип данных geometry)
- STStartPoint (тип данных geometry)
- STEndpoint (тип данных geometry)
- STPointN (тип данных geometry)
- STNumPoints (тип данных geometry)
- STIsRing (тип данных geometry)
- STIsClosed (тип данных geometry)
- STPointOnSurface (тип данных geometry)
- LineString