CompoundCurveCompoundCurve

CompoundCurve 는 geometry 또는 geography 유형의 연속적인 CircularString 또는 LineString 인스턴스가 하나 이상 포함된 컬렉션입니다.A CompoundCurve is a collection of zero or more continuous CircularString or LineString instances of either geometry or geography types.

중요

CompoundCurve 하위 유형을 포함하여 이 릴리스의 새로운 공간 기능에 대한 자세한 설명 및 예제를 보려면 SQL Server 2012의 새로운 공간 기능백서를 다운로드하세요.For a detailed description and examples of the new spatial features in this release, including the CompoundCurve subtype, download the white paper, New Spatial Features in SQL Server 2012.

CompoundCurve 인스턴스를 인스턴스화할 수 있지만 CompoundCurve 가 유효한 인스턴스가 되려면 다음 조건을 충족해야 합니다.An empty CompoundCurve instance can be instantiated, but for a CompoundCurve to be valid it must meet the following criteria:

  1. 적어도 하나의 CircularString 또는 LineString 인스턴스를 포함해야 합니다.It must contain at least one CircularString or LineString instance.

  2. CircularString 또는 LineString 인스턴스의 시퀀스는 연속적이어야 합니다.The sequence of CircularString or LineString instances must be continuous.

    CompoundCurve 가 여러 CircularStringLineString 인스턴스 시퀀스를 포함하는 경우 마지막 인스턴스를 제외한 모든 인스턴스의 종료 끝점은 시퀀스에 있는 다음 인스턴스의 시작 끝점이어야 합니다.If a CompoundCurve contains a sequence of multiple CircularString and LineString instances, the ending endpoint for every instance except for the last instance must be the starting endpoint for the next instance in the sequence. 즉, 시퀀스에서 이전 인스턴스의 끝 점이 (4 3 7 2)인 경우 시퀀스에서 다음 인스턴스의 시작 점은 (4 3 7 2)여야 합니다.This means that if the ending point of a prior instance in the sequence is (4 3 7 2), the starting point for the next instance in the sequence must be (4 3 7 2). 점의 Z(높이) 및 M(측정값) 값도 동일해야 합니다.Note that Z(elevation) and M(measure) values for the point must also be the same. 두 점이 다른 경우 System.FormatException 이 발생합니다.If there is a difference in the two points, a System.FormatException is thrown. CircularString 의 점은 Z 또는 M 값을 가지고 있지 않아도 됩니다.Points in a CircularString do not have to have a Z or M value. 이전 인스턴스의 종료 점에 대해 Z 또는 M 값이 지정되지 않은 경우 다음 인스턴스의 시작 점은 Z 또는 M 값을 포함할 수 없습니다.If no Z or M values are given for the ending point of the prior instance, the starting point of the next instance cannot include Z or M values. 이전 시퀀스의 종료 점이 (4 3)이면 다음 시퀀스의 시작 점은 (4 3)이어야 하지 (4 3 7 2)일 수는 없습니다.If the ending point for the prior sequence is (4 3), the starting point for the next sequence must be (4 3); it cannot be (4 3 7 2). CompoundCurve 인스턴스의 모든 점은 Z 값을 가지고 있지 않거나 같은 Z 값을 가지고 있어야 합니다.All points in a CompoundCurve instance must have either no Z value or the same Z value.

CompoundCurve 인스턴스CompoundCurve instances

다음 그림에서는 유효한 CompoundCurve 형식을 보여 줍니다.The following illustration shows valid CompoundCurve types.

f278742e-b861-4555-8b51-3d972b7602bf

허용되는 인스턴스Accepted instances

CompoundCurve 인스턴스는 빈 인스턴스이거나 다음 조건을 충족하는 경우 허용됩니다.CompoundCurve instance is accepted if it is an empty instance or meets the following criteria.

  1. CompoundCurve 인스턴스에 포함된 모든 인스턴스가 허용되는 원호 세그먼트 인스턴스인 경우.All the instances contained by CompoundCurve instance are accepted circular arc segment instances. 허용되는 원호 세그먼트 인스턴스에 대한 자세한 내용은 LineStringCircularString을 참조하세요.For more information on accepted circular arc segment instances, see LineString and CircularString.

  2. CompoundCurve 인스턴스의 모든 원호 세그먼트가 연결되어 있는 경우.All of the circular arc segments in the CompoundCurve instance are connected. 즉, 이어지는 각 원호 세그먼트의 첫 번째 점이 앞에 있는 원호 세그먼트의 마지막 점과 같아야 합니다.The first point for each succeeding circular arc segment is the same as the last point on the preceeding circular arc segment.

    참고

    여기에는 Z와 M 좌표가 포함됩니다.This includes the Z and M coordinates. 따라서 네 후보 X, Y, Z 및 M이 모두 같아야 합니다.So, all four coordinates X, Y, Z, and M must be the same.

  3. 포함된 인스턴스 중 비어 있는 인스턴스가 없는 경우None of the contained instances are empty instances.

    다음 예에서는 허용되는 CompoundCurve 인스턴스를 보여 줍니다.The following example shows accepted CompoundCurve instances.

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

다음 예에서는 허용되지 않는 CompoundCurve 인스턴스를 보여 줍니다.The following example shows CompoundCurve instances that are not accepted. 이 인스턴스에서는 System.FormatException이 발생합니다.These instances throw System.FormatException.

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

유효한 인스턴스Valid instances

CompoundCurve 인스턴스는 다음 조건을 충족하는 경우 유효합니다.A CompoundCurve instance is valid if it meets the following criteria.

  1. CompoundCurve 인스턴스가 허용되는 경우The CompoundCurve instance is accepted.

  2. CompoundCurve 인스턴스에 포함된 모든 원호 세그먼트 인스턴스가 유효한 인스턴스인 경우All circular arc segment instances contained by the CompoundCurve instance are valid instances.

    다음 예에서는 유효한 CompoundCurve 인스턴스를 보여 줍니다.The following example shows valid CompoundCurve instances.

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 인스턴스가 유효하므로 유효합니다.@g3 is valid because the CircularString instance is valid. CircularString 인스턴스의 유효성에 대한 자세한 내용은 CircularString을 참조하십시오.For more information on the validity of the CircularString instance, see CircularString.

다음 예에서는 유효하지 않은 CompoundCurve 인스턴스를 보여 줍니다.The following example shows CompoundCurve instances that are not valid.

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 은 잘못되었습니다.@g1 is not valid because the second instance is not a valid LineString instance. @g2LineString 인스턴스가 유효하지 않으므로 유효하지 않습니다.@g2 is not valid because the LineString instance is not valid. @g3CircularString 인스턴스가 유효하지 않으므로 유효하지 않습니다.@g3 is not valid because the CircularString instance is not valid. 유효한 CircularStringLineString 인스턴스에 대한 자세한 내용은 CircularStringLineString을 참조하십시오.For more information on valid CircularString and LineString instances, see CircularString and LineString.

Examples

1.A. 빈 CompooundCurve를 사용하여 기하 도형 인스턴스 인스턴스화Instantiating a geometry instance with an empty CompooundCurve

다음 예에서는 빈 CompoundCurve 인스턴스를 만드는 방법을 보여 줍니다.The following example shows how to create an empty CompoundCurve instance:

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

2.B. 동일한 문에서 CompoundCurve를 사용하여 기하 도형 인스턴스 선언 및 인스턴스화Declaring and instantiating a geometry instance using a CompoundCurve in the same statement

다음 예에서는 동일한 문에서 geometry 을 사용하여 CompoundCurve인스턴스를 선언하고 초기화하는 방법을 보여 줍니다.The following example shows how to declare and initialize a geometry instance with a CompoundCurvein the same statement:

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))';  

3.C. CompoundCurve를 사용하여 지리 인스턴스 인스턴스화Instantiating a geography instance with a CompoundCurve

다음 예에서는 를 사용하여 geography CompoundCurve인스턴스를 선언하고 초기화하는 방법을 보여 줍니다.The following example shows how to declare and initialize a geography instance with a 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))';  

4.D. CompoundCurve 인스턴스에 사각형 저장Storing a square in a CompoundCurve instance

다음 예에서는 CompoundCurve 인스턴스를 사용하여 사각형을 저장하는 두 가지 방법을 보여 줍니다.The following example uses two different ways to use a CompoundCurve instance to store a square.

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 의 길이는 같습니다.The lengths for both @g1 and @g2 are the same. 이 예에서는 CompoundCurve 인스턴스가 하나 이상의 LineString인스턴스를 저장할 수 있음을 알 수 있습니다.Notice from the example that a CompoundCurve instance can store one or more instances of LineString.

5.E. 여러 CircularString을 포함하는 CompoundCurve를 사용하여 기하 도형 인스턴스 인스턴스화Instantiating a geometry instance using a CompoundCurve with multiple CircularStrings

다음 예에서는 서로 다른 두 CircularString 인스턴스를 사용하여 CompoundCurve를 초기화하는 방법을 보여 줍니다.The following example shows how to use two different CircularString instances to initialize a 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…This produces the following output: 12.566370… 4∏와 동일합니다.which is the equivalent of 4∏. 예에서 CompoundCurve 인스턴스는 반지름이 2인 원을 저장합니다.The CompoundCurve instance in the example stores a circle with a radius of 2. 앞의 두 코드 예에서는 CompoundCurve를 사용할 필요가 없었습니다.Both of the previous code examples did not have to use a CompoundCurve. 첫 번째 예의 경우 LineString 인스턴스를 사용하면 더 간단했을 것이고 두 번째 예의 경우 CircularString 인스턴스를 사용하면 더 간단했을 것입니다.For the first example a LineString instance would have been simpler, and a CircularString instance would have been simpler for the second example. 하지만 다음 예에서는 CompoundCurve 를 사용하는 것이 더 좋은 경우를 보여 줍니다.However, the next example shows where a CompoundCurve provides a better alternative.

6.F. CompoundCurve를 사용하여 반원 저장Using a CompoundCurve to store a semicircle

다음 예에서는 CompoundCurve 인스턴스를 사용하여 반원을 저장합니다.The following example uses a CompoundCurve instance to store a semicircle.

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

7.G. CompoundCurve에 여러 개의 CircularString 및 LineString 인스턴스 저장Storing multiple CircularString and LineString instances in a CompoundCurve

다음 예에서는 CircularString 를 사용하여 여러 개의 LineStringCompoundCurve인스턴스를 저장하는 방법을 보여 줍니다.The following example shows how multiple CircularString and LineString instances can be stored by using a 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();  

8.H. Z 및 M 값이 있는 인스턴스 저장Storing instances with Z and M values

다음 예에서는 CompoundCurve 인스턴스를 사용하여 Z 값과 M 값이 모두 있는 CircularStringLineString 인스턴스 시퀀스를 저장하는 방법을 보여 줍니다.The following example shows how to use a CompoundCurve instance to store a sequence of CircularString and LineString instances with both Z and M values.

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.I. CircularString 인스턴스를 명시적으로 선언해야 하는 이유에 대한 설명Illustrating why CircularString instances must be explicitly declared

다음 예에서는 CircularString 인스턴스를 명시적으로 선언해야 하는 이유를 보여 줍니다.The following example shows why CircularString instances must be explicitly declared. 프로그래머는 CompoundCurve 인스턴스에 원을 저장하려고 합니다.The programmer is trying to store a circle in a CompoundCurve instance.

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  

다음과 같은 출력이 생성됩니다.The output is as follows:

Circle One11.940039…  
Circle Two12.566370…  

Circle Two의 둘레는 대략 4∏로 이 값은 둘레의 실제 값입니다.The perimeter for Circle Two is approximately 4∏, which is the actual value for the perimeter. 하지만 Circle One의 둘레는 매우 부정확합니다.However, the perimeter for Circle One is significantly inaccurate. Circle One의 CompoundCurve 인스턴스는 하나의 원호 세그먼트(ABC)와 두 개의 선분(CD, DA)을 저장합니다.Circle One's CompoundCurve instance stores one circular arc segment (ABC) and two line segments (CD, DA). 원을 정의하려면 CompoundCurve 인스턴스는 두 개의 원호 세그먼트(ABC, CDA)를 저장해야 합니다.The CompoundCurve instance has to store two circular arc segments (ABC, CDA) to define a circle. 1 LineString 인스턴스는 Circle One의 CompoundCurve 인스턴스에 두 번째 점 집합(4 2, 2 4, 0 2)을 정의합니다.A LineString instance defines the second set of points (4 2, 2 4, 0 2) in Circle One's CompoundCurve instance. CircularString 내부에서 CompoundCurve인스턴스를 명시적으로 선언해야 합니다.You have to explicitly declare a CircularString instance inside a CompoundCurve.

참고 항목See Also

STIsValid(geometry 데이터 형식) STIsValid (geometry Data Type)
STLength(geometry 데이터 형식) STLength (geometry Data Type)
STStartPoint(geometry 데이터 형식) STStartPoint (geometry Data Type)
STEndpoint(geometry 데이터 형식) STEndpoint (geometry Data Type)
LineString LineString
CircularString CircularString
공간 데이터 형식 개요 Spatial Data Types Overview
Point