CompoundCurve
적용 대상: SQL Server Azure SQL 데이터베이스 SQL Managed Instance
CompoundCurve 는 geometry 또는 geography 유형의 연속적인 CircularString 또는 LineString 인스턴스가 하나 이상 포함된 컬렉션입니다.
빈 CompoundCurve 인스턴스를 인스턴스화할 수 있지만 CompoundCurve 가 유효한 인스턴스가 되려면 다음 조건을 충족해야 합니다.
하나 이상의 CircularString 또는 LineString 인스턴스를 포함해야 합니다.
CircularString 또는 LineString 인스턴스의 시퀀스는 연속적이어야 합니다.
CompoundCurve 가 여러 CircularString 및 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 인스턴스는 빈 인스턴스이거나 다음 조건을 충족하는 경우 허용됩니다.
CompoundCurve 인스턴스에 포함된 모든 인스턴스는 허용되는 원호 세그먼트 인스턴스입니다. 허용되는 원호 세그먼트에 대한 자세한 내용은 LineString 및 CircularString을 참조하십시오.
CompoundCurve 인스턴스의 모든 원호 세그먼트는 연결되어 있습니다. 이어지는 각 원호 세그먼트의 첫 번째 포인트가 앞에 있는 원호 세그먼트의 마지막 포인트와 같아야 합니다.
참고 항목
여기에는 Z 및 M 좌표가 포함됩니다. 따라서 네 후보 X, Y, Z 및 M이 모두 같아야 합니다.
포함된 인스턴스 중 빈 인스턴스는 없습니다.
다음 예제에서는 허용되는 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 인스턴스는 다음 조건을 충족하는 경우 유효합니다.
CompoundCurve 인스턴스가 허용됩니다.
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();
CircularString 인스턴스가 유효하므로 @g3
은(는) 유효합니다. 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 인스턴스가 유효하지 않으므로 유효하지 않습니다. CircularString 인스턴스가 유효하지 않으므로 @g3
은(는) 유효하지 않습니다. 유효한 CircularString 및 LineString 인스턴스에 대한 자세한 내용은 CircularString 및 LineString을 참조하십시오.
예제
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를 사용하여 지리 인스턴스 인스턴스화
다음 예제에서는 CompoundCurve
로 geography 인스턴스를 선언하고 인스턴스화하는 방법을 보여 줍니다.
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. 여러 CircularString을 포함하는 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();
그러면 4?에 해당하는 출력 12.5663706143592
가 생성됩니다. 예제의 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 인스턴스 저장
다음 예제에서는 여러 CircularString
및 LineString
인스턴스를 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 값이 모두 있는 CircularString
및 LineString
인스턴스 시퀀스를 저장하는 방법을 보여 줍니다.
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))');
9\. 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?입니다. 그러나 원 1의 둘레는 그다지 정확하지 않습니다. Circle One의 CompoundCurve
인스턴스는 하나의 원호 세그먼트(ABC)와 두 개의 선분(CD, DA)을 저장합니다. CompoundCurve
인스턴스는 두 개의 원호 세그먼트(ABC, CDA)를 저장하여 원을 정의해야 합니다. LineString
인스턴스는 원 1의 CompoundCurve
인스턴스에서 두 번째 포인트 집합(4 2, 2 4, 0 2)을 정의합니다. CircularString
인스턴스를 CompoundCurve
안에서 명시적으로 선언해야 합니다.
참고 항목
STIsValid(geometry 데이터 형식)
STLength(기하학 데이터 형식)
STStartPoint(지역 데이터 형식)
STEndpoint(geometry 데이터 형식)
LineString
CircularString
공간 데이터 형식 개요
연락