적용 대상:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Microsoft Fabric
의 SQL 분석 엔드포인트Microsoft Fabric
의 웨어하우스Microsoft Fabric의 SQL 데이터베이스
CircularString은 0개 이상의 연속 원호 세그먼트 컬렉션입니다. 원호 세그먼트는 2차원 평면에서 3개의 점으로 정의되는 곡선 세그먼트입니다. 첫 번째 점은 세 번째 점과 같을 수 없습니다. 원호 세그먼트의 세 포인트가 모두 선형인 경우 호 세그먼트는 선 세그먼트로 처리됩니다.
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 인스턴스는 비어 있거나 다음 특성을 포함해야 합니다.
- 하나 이상의 원호 세그먼트(즉, 포인트 3개 이상 포함)를 포함해야 합니다.
- 마지막 세그먼트를 제외하고, 시퀀스의 각 원호 세그먼트의 마지막 끝점은 시퀀스의 다음 세그먼트의 첫 번째 끝점이어야 합니다.
- 포인트가 홀수 개 있어야 합니다.
- 간격에 따라 겹칠 수 없습니다.
- 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. 빈 CircularString을 사용하여 Geometry 인스턴스 인스턴스 인스턴스화
이 예제에서는 빈CircularString 인스턴스를 만드는 방법을 보여 줍니다.
DECLARE @g geometry;
SET @g = geometry::Parse('CIRCULARSTRING EMPTY');
B. 원호 세그먼트 하나가 있는 CircularString을 사용하여 기하 도형 인스턴스 인스턴스 인스턴스화
다음 예에서는 단일 원호 세그먼트(반원)를 사용하여 CircularString 인스턴스를 만드는 방법을 보여 줍니다.
DECLARE @g geometry;
SET @g = geometry:: STGeomFromText('CIRCULARSTRING(2 0, 1 1, 0 0)', 0);
SELECT @g.ToString();
C. 여러 원호 세그먼트가 있는 CircularString을 사용하여 Geometry 인스턴스 인스턴스 인스턴스화
다음 예에서는 두 개 이상의 원호 세그먼트(완전한 원)를 사용하여 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
CircularString 대신 LineString을 사용할 때의 출력을 비교합니다.
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 인스턴스 선언 및 인스턴스화
이 조각은 동일한 문에서 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으로 geometry 인스턴스를 선언하고 인스턴스화하는 방법을 보여 줍니다.
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을 사용하여 Geometry 인스턴스 인스턴스 인스턴스화
다음 예제에서는 직선인 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(기하학 데이터 형식)
- STStartPoint(지역 데이터 형식)
- STEndpoint(geometry 데이터 형식)
- STPoint(geometry 데이터 형식)
- STNumPoints(geometry 데이터 형식)
- STIsRing(geometry 데이터 형식)
- STIsClosed(geometry 데이터 형식)
- STPointOnSurface(geometry 데이터 형식)
- LineString