CompoundCurve
적용 대상:SQL ServerAzure SQL DatabaseAzure 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(측정값) 값도 동일해야 합니다. 두 점에 차이가 있으면 throw 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 인스턴스를 보여 줍니다. 이러한 인스턴스는 throw 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();
@g3
는 CircularString 인스턴스가 유효하기 때문에 유효합니다. 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 인스턴스가 유효하지 않으므로 유효하지 않습니다. @g3
는 CircularString 인스턴스가 잘못되었기 때문에 유효하지 않습니다. 유효한 CircularString 및 LineString 인스턴스에 대한 자세한 내용은 CircularString 및 LineString을 참조하십시오.
예
A. 빈 CompooundCurve를 사용하여 기하 도형 인스턴스 인스턴스 인스턴스화
다음 예제에서는 빈 CompoundCurve
인스턴스를 만드는 방법을 보여 줍니다.
DECLARE @g geometry;
SET @g = geometry::Parse('COMPOUNDCURVE EMPTY');
B. 동일한 문에서 CompoundCurve를 사용하여 기하 도형 인스턴스 선언 및 인스턴스화
다음 예제에서는 동일한 문에서 인스턴스CompoundCurve
를 geometry
선언하고 초기화하는 방법을 보여 줍니다.
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. 여러 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?입니다. 그러나 원 원의 경계는 상당히 정확하지 않습니다. Circle One의 CompoundCurve
인스턴스는 하나의 원호 세그먼트(ABC)와 두 개의 선분(CD, DA)을 저장합니다. 인스턴스는 CompoundCurve
원을 정의하기 위해 두 개의 원호 세그먼트(ABC, CDA)를 저장해야 합니다. 인스턴스는 LineString
원 원 CompoundCurve
인스턴스에서 두 번째 점 집합(4 2, 2 4, 0 2)을 정의합니다. 에서 인스턴스를 CircularString
명시적으로 선언해야 합니다 CompoundCurve
.
참고 항목
STIsValid(geometry 데이터 형식)
STLength(geometry 데이터 형식)
STStartPoint(geometry 데이터 형식)
STEndpoint(geometry 데이터 형식)
Linestring
CircularString
공간 데이터 형식 개요
지점
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기