다음을 통해 공유


CompoundCurve

A CompoundCurve 는 0개 이상의 연속 CircularString 또는 LineString 인 기하학적 유형 또는 지리학적 유형의 인스턴스 컬렉션입니다.

중요합니다

하위 형식을 포함하여 CompoundCurve 이 릴리스의 새로운 공간 기능에 대한 자세한 설명과 예제를 보려면 SQL Server 2012의 새 공간 기능 백서를 다운로드하세요.

CompoundCurve 인스턴스를 인스턴스화할 수 있지만 CompoundCurve 유효하려면 다음 조건을 충족해야 합니다.

  1. CircularString 또는 LineString 인스턴스를 최소한 하나 이상 포함해야 합니다.

  2. 시퀀스 CircularString 또는 LineString 인스턴스는 연속적이어야 합니다.

여러 CompoundCurveCircularString 인스턴스의 LineString 시퀀스가 포함된 경우 마지막 인스턴스를 제외한 모든 인스턴스의 끝 엔드포인트는 시퀀스의 다음 인스턴스에 대한 시작 엔드포인트여야 합니다. 즉, 시퀀스에서 이전 인스턴스의 끝 점이 (4 3 7 2)인 경우 시퀀스에서 다음 인스턴스의 시작 점은 (4 3 7 2)여야 합니다. 점의 Z(고도) 및 M(측정) 값도 동일해야 합니다. 두 포인트에 차이가 있으면 System.FormatException이(가) 발생됩니다. CircularString 내의 점은 Z값 또는 M값이 없어도 됩니다. 이전 인스턴스가 끝나는 포인트의 Z 또는 M값이 지정되지 않은 경우 다음 인스턴스의 시작점은 Z 또는 M값을 포함할 수 없습니다. 이전 시퀀스가 끝나는 포인트가 (4 3)인 경우 다음 시퀀스의 시작점은 (4 3)이어야 하며, (4 3 7 2)일 수 없습니다. 인스턴스의 CompoundCurve 모든 지점은 Z 값이 없거나 동일한 Z 값을 가져야 합니다.

CompoundCurve 인스턴스

다음 그림에서는 유효한 CompoundCurve 형식을 보여 줍니다.

허용되는 인스턴스

CompoundCurve 인스턴스가 빈 인스턴스이거나 다음 조건을 충족하는 경우 허용됩니다.

  1. 인스턴스에 포함된 CompoundCurve 모든 인스턴스는 원호 세그먼트 인스턴스로 허용됩니다. 허용되는 원호 세그먼트에 대한 자세한 내용은 LineStringCircularString을 참조하십시오.

  2. 인스턴스의 모든 원호 세그먼트가 CompoundCurve 연결됩니다. 이어지는 각 원호 세그먼트의 첫 번째 포인트가 앞에 있는 원호 세그먼트의 마지막 포인트와 같아야 합니다.

    비고

    여기에는 Z 및 M 좌표가 포함됩니다. 따라서 네 후보 X, Y, Z 및 M이 모두 같아야 합니다.

  3. 포함된 인스턴스 중 빈 인스턴스는 없습니다.

다음 예제에서는 허용되는 CompoundCurve 인스턴스를 보여 줍니다.

DECLARE @g1 geometry = 'COMPOUNDCURVE EMPTY';
DECLARE @g2 geometry = 'COMPOUNDCURVE(CIRCULARSTRING(1 0, 0 1, -1 0), (-1 0, 2 0))';

다음 예제는 허용되지 않는 CompoundCurve 인스턴스를 보여줍니다. 이러한 인스턴스는 System.FormatException을(를) 발생시킵니다.

DECLARE @g1 geometry = 'COMPOUNDCURVE(CIRCULARSTRING EMPTY)';
DECLARE @g2 geometry = 'COMPOUNDCURVE(CIRCULARSTRING(1 0, 0 1, -1 0), (1 0, 2 0))';

유효한 인스턴스

CompoundCurve 인스턴스가 다음 조건을 충족하는 경우 유효합니다.

  1. 인스턴스가 CompoundCurve 허용됩니다.

  2. CompoundCurve 인스턴스에 포함된 모든 원호 세그먼트 인스턴스는 유효한 인스턴스입니다.

다음 예제에서는 유효한 CompoundCurve 인스턴스를 보여 줍니다.

DECLARE @g1 geometry = 'COMPOUNDCURVE EMPTY';
DECLARE @g2 geometry = 'COMPOUNDCURVE(CIRCULARSTRING(1 0, 0 1, -1 0), (-1 0, 2 0))';
DECLARE @g3 geometry = 'COMPOUNDCURVE(CIRCULARSTRING(1 1, 1 1, 1 1), (1 1, 3 5, 5 4))';
SELECT @g1.STIsValid(), @g2.STIsValid(), @g3.STIsValid();

@g3CircularString 인스턴스가 유효하기 때문에 유효합니다. 인스턴스의 CircularString 유효성에 대한 자세한 내용은 CircularString을 참조하세요.

다음 예제에서는 유효하지 않은 CompoundCurve 인스턴스를 보여줍니다.

DECLARE @g1 geometry = 'COMPOUNDCURVE(CIRCULARSTRING(1 1, 1 1, 1 1), (1 1, 3 5, 5 4, 3 5))';
DECLARE @g2 geometry = 'COMPOUNDCURVE((1 1, 1 1))';
DECLARE @g3 geometry = 'COMPOUNDCURVE(CIRCULARSTRING(1 1, 2 3, 1 1))';
SELECT @g1.STIsValid(), @g2.STIsValid(), @g3.STIsValid();

@g1 은 잘못되었습니다. @g2은(는) LineString 인스턴스가 유효하지 않기 때문에 유효하지 않습니다. @g3CircularString 인스턴스가 유효하지 않기 때문에 유효하지 않습니다. 유효한 CircularString 인스턴스 및 LineString 인스턴스에 대한 자세한 내용은 CircularStringLineString을 참조하세요.

예시

A. 빈 CompoundCurve로 기하 인스턴스를 생성하기

다음 예제는 빈 CompoundCurve 인스턴스를 만드는 방법을 보여 줍니다.

DECLARE @g geometry;
SET @g = geometry::Parse('COMPOUNDCURVE EMPTY');

B. 동일한 문에서 CompoundCurve를 사용하여 기하 도형 인스턴스 선언 및 인스턴스화

다음 예제에서는 geometry 인스턴스를 CompoundCurve동일한 문에서 선언하고 초기화하는 방법을 보여 줍니다.

DECLARE @g geometry = 'COMPOUNDCURVE ((2 2, 0 0),CIRCULARSTRING (0 0, 1 2.1082, 3 6.3246, 0 7, -3 6.3246, -1 2.1082, 0 0))';

C. CompoundCurve를 사용하여 지리 인스턴스를 인스턴스화

다음 예제에서는 다음을 사용하여 인스턴스를 geography 선언하고 초기화하는 방법을 보여 줍니다.CompoundCurve

DECLARE @g geography = 'COMPOUNDCURVE(CIRCULARSTRING(-122.358 47.653, -122.348 47.649, -122.348 47.658, -122.358 47.658, -122.358 47.653))';

D. CompoundCurve 인스턴스에 사각형 저장

다음 예제에서는 CompoundCurve 인스턴스를 사용하여 사각형을 저장하는 두 가지 방법을 사용합니다.

DECLARE @g1 geometry, @g2 geometry;
SET @g1 = geometry::Parse('COMPOUNDCURVE((1 1, 1 3), (1 3, 3 3),(3 3, 3 1), (3 1, 1 1))');
SET @g2 = geometry::Parse('COMPOUNDCURVE((1 1, 1 3, 3 3, 3 1, 1 1))');
SELECT @g1.STLength(), @g2.STLength();

@g1@g2 모두 길이가 동일합니다. 예제에서 CompoundCurve 인스턴스는 하나 이상의 LineString 인스턴스를 저장할 수 있음을 알아두세요.

E. 여러 CircularStrings가 포함된 CompoundCurve를 사용하여 기하 도형 인스턴스를 인스턴스화

다음 예제에서는 두 개의 서로 다른 CircularString 인스턴스를 사용하여 CompoundCurve을(를) 초기화하는 방법을 보여 줍니다.

DECLARE @g geometry;
SET @g = geometry::Parse('COMPOUNDCURVE(CIRCULARSTRING(0 2, 2 0, 4 2), CIRCULARSTRING(4 2, 2 4, 0 2))');
SELECT @g.STLength();

이 결과는 출력값으로 12.566370...이며, 이는 4π (4 * pi)에 해당합니다. 예제의 CompoundCurve 인스턴스는 반지름이 2인 원을 저장합니다. 앞의 두 코드 예에서는 CompoundCurve를 사용할 필요가 없었습니다. 첫 번째 예의 경우 LineString 인스턴스를 사용하면 더 간단했을 것이고 두 번째 예의 경우 CircularString 인스턴스를 사용하면 더 간단했을 것입니다. 그러나 다음 예제에서는 CompoundCurve이(가) 더 나은 대안을 제공하는 것을 보여줍니다.

F. CompoundCurve를 사용하여 반원을 저장하는 방법

다음 예에서는 CompoundCurve 인스턴스를 사용하여 반원을 저장합니다.

DECLARE @g geometry;
SET @g = geometry::Parse('COMPOUNDCURVE(CIRCULARSTRING(0 2, 2 0, 4 2), (4 2, 0 2))');
SELECT @g.STLength();

G. CompoundCurve에 여러 CircularString 및 LineString 인스턴스 저장

다음 예제에서는 여러 CircularStringLineString 인스턴스를 CompoundCurve을(를) 사용하여 저장할 수 있는 방법을 보여 줍니다.

DECLARE @g geometry
SET @g = geometry::Parse('COMPOUNDCURVE((3 5, 3 3), CIRCULARSTRING(3 3, 5 1, 7 3), (7 3, 7 5), CIRCULARSTRING(7 5, 5 7, 3 5))');
SELECT @g.STLength();

H. Z 및 M 값을 사용하여 인스턴스 저장

다음 예에서는 CompoundCurve 인스턴스를 사용하여 Z 값과 M 값이 모두 있는 CircularStringLineString 인스턴스 시퀀스를 저장하는 방법을 보여 줍니다.

SET @g = geometry::Parse('COMPOUNDCURVE(CIRCULARSTRING(7 5 4 2, 5 7 4 2, 3 5 4 2), (3 5 4 2, 8 7 4 2))');

제1장 CircularString 인스턴스를 명시적으로 선언해야 하는 이유 설명

다음 예에서는 CircularString 인스턴스를 명시적으로 선언해야 하는 이유를 보여 줍니다. 프로그래머가 CompoundCurve 인스턴스에 원을 저장하려고 합니다.

DECLARE @g1 geometry;  
DECLARE @g2 geometry;
SET @g1 = geometry::Parse('COMPOUNDCURVE(CIRCULARSTRING(0 2, 2 0, 4 2), (4 2, 2 4, 0 2))');
SELECT 'Circle One', @g1.STLength() AS Perimeter;  -- gives an inaccurate amount
SET @g2 = geometry::Parse('COMPOUNDCURVE(CIRCULARSTRING(0 2, 2 0, 4 2), CIRCULARSTRING(4 2, 2 4, 0 2))');
SELECT 'Circle Two', @g2.STLength() AS Perimeter;  -- now we get an accurate amount

출력은 다음과 같습니다.

Circle One11.940039...
Circle Two12.566370...

원 2의 경계는 약 4σ(4 * pi)이며 이는 경계의 실제 값입니다. 그러나 원 1의 둘레는 그다지 정확하지 않습니다. Circle One의 CompoundCurve 인스턴스는 하나의 원형 호 세그먼트(ABC)와 두 개의 선 세그먼트(CD, DA)를 저장합니다. 인스턴스 CompoundCurve는 원을 정의하기 위해 두 개의 원호 부분 (ABC, CDA)을 저장해야 합니다. LineString 인스턴스는 원 1의 CompoundCurve 인스턴스에서 두 번째 포인트 집합(4 2, 2 4, 0 2)을 정의합니다. CircularString 인스턴스를 CompoundCurve 안에서 명시적으로 선언해야 합니다.

또한 참조하십시오

STIsValid(geometry 데이터 형식)STLength(geometry 데이터 형식)STStartPoint(geometry 데이터 형식)STEndpoint(geometry 데이터 형식)LineStringCircularString공간 데이터 형식 개요지점