CurvePolygonCurvePolygon

이 항목 적용 대상: 예SQL Server예Azure SQL 데이터베이스없습니다Azure SQL 데이터 웨어하우스 없습니다 병렬 데이터 웨어하우스THIS TOPIC APPLIES TO: yesSQL ServeryesAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse CurvePolygon은 외부 경계 링과 0개 이상의 내부 링에서 정의하는 토폴로지 방식으로 닫힌 표면입니다. A CurvePolygon is a topologically closed surface defined by an exterior bounding ring and zero or more interior rings

중요

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

다음 조건은 CurvePolygon 인스턴스의 특성을 정의합니다.The following criteria define attributes of a CurvePolygon instance:

  • CurvePolygon 인스턴스의 경계는 외부 링과 모든 내부 링으로 정의됩니다.The boundary of the CurvePolygon instance is defined by the exterior ring and all interior rings.

  • CurvePolygon 인스턴스의 내부는 외부 링과 모든 내부 링 사이의 공간입니다.The interior of the CurvePolygon instance is the space between the exterior ring and all of the interior rings.

    CurvePolygon 인스턴스는 Polygon 인스턴스와 다릅니다. CurvePolygon 인스턴스에는 원호 세그먼트인 CircularStringCompoundCurve가 포함될 수 있습니다.A CurvePolygon instance differs from a Polygon instance in that a CurvePolygon instance may contain the following circular arc segments: CircularString and CompoundCurve.

CompoundCurve 인스턴스CompoundCurve instances

다음 그림에서는 유효한 CurvePolygon 그림을 보여 줍니다.Illustration below shows valid CurvePolygon figures:

허용되는 인스턴스Accepted instances

CurvePolygon 인스턴스가 허용되려면 해당 인스턴스가 비어 있거나 허용된 원호 링만 포함해야 합니다.For a CurvePolygon instance to be accepted, it needs to be either empty or contain only circular arc rings that are accepted. 허용되는 원호 링은 다음 요구 사항을 충족합니다.An accepted circular arc ring meets the following requirements.

  1. 허용되는 LineString, CircularString또는 CompoundCurve 인스턴스여야 합니다.Is an accepted LineString, CircularString, or CompoundCurve instance. 허용되는 인스턴스에 대한 자세한 내용은 LineString, CircularStringCompoundCurve를 참조하십시오.For more information on accepted instances, see LineString, CircularString, and CompoundCurve.

  2. 4개 이상의 점이 있어야 합니다.Has at least four points.

  3. 시작점과 끝점의 X 및 Y 좌표가 동일해야 합니다.The start and end point have the same X and Y coordinates.

    참고

    Z 및 M 값이 무시되어야 합니다.Z and M values are ignored.

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

DECLARE @g1 geometry = 'CURVEPOLYGON EMPTY';  
DECLARE @g2 geometry = 'CURVEPOLYGON((0 0, 0 0, 0 0, 0 0))';  
DECLARE @g3 geometry = 'CURVEPOLYGON((0 0 1, 0 0 2, 0 0 3, 0 0 3))'  
DECLARE @g4 geometry = 'CURVEPOLYGON(CIRCULARSTRING(1 3, 3 5, 4 7, 7 3, 1 3))';  
DECLARE @g5 geography = 'CURVEPOLYGON((-122.3 47, 122.3 -47, 125.7 -49, 121 -38, -122.3 47))';  

@g3 이 허용됩니다.@g3 is accepted even though the start and end points have different Z values because Z values are ignored. @g5geography 유형 인스턴스가 유효하지 않아도 허용됩니다.@g5 is accepted even though the geography type instance is not valid.

다음 예에서는 System.FormatException이 발생합니다.The following examples throw System.FormatException.

DECLARE @g1 geometry = 'CURVEPOLYGON((0 5, 0 0, 0 0, 0 0))';  
DECLARE @g2 geometry = 'CURVEPOLYGON((0 0, 0 0, 0 0))';  

@g1 이 허용되지 않습니다.@g1 is not accepted because the start and end points do not have the same Y value. @g2 가 허용되지 않습니다.@g2 is not accepted because the ring does not have enough points.

유효한 인스턴스Valid instances

CurvePolygon 인스턴스가 유효하려면 외부 링과 내부 링이 모두 다음 조건을 충족해야 합니다.For a CurvePolygon instance to be valid both exterior and interior rings must meet the following criteria:

  1. 이 두 링은 단일 탄젠트 점에서만 접할 수 있습니다.They may only touch at single tangent points.

  2. 이 두 링은 서로 교차할 수 없습니다.They cannot cross each other.

  3. 각 링에 4개 이상의 점이 있어야 합니다.Each ring must contain at least four points.

  4. 각 링이 허용 가능한 곡선 유형이어야 합니다.Each ring must be an acceptable curve type.

    또한CurvePolygon 인스턴스는 geometry 또는 geography 데이터 형식인지에 따라 특정 조건을 충족해야 합니다.CurvePolygon instances also need to meet specific criteria depending on whether they are geometry or geography data types.

Geometry 데이터 형식Geometry data type

유효한 geometryCurvePolygon 인스턴스는 다음 특성을 포함해야 합니다.A valid geometryCurvePolygon instance must have the following attributes:

  1. 모든 내부 링은 외부 링에 포함되어야 합니다.All the interior rings must be contained within the exterior ring.

  2. 내부 링이 여러 개일 수 있지만 내부 링은 다른 내부 링을 포함할 수 없습니다.May have multiple interior rings, but an interior ring cannot contain another interior ring.

  3. 링은 자체적으로 또는 다른 링을 교차할 수 없습니다.No ring can cross itself or another ring.

  4. 링은 단일 탄젠트 점(링 접촉이 한정된 점 수)에서만 접할 수 있습니다.Rings can only touch at single tangent points (number of points where rings touch must be finite).

  5. 다각형 내부는 연결되어야 합니다.The interior of the polygon must be connected.

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

DECLARE @g1 geometry = 'CURVEPOLYGON EMPTY';  
DECLARE @g2 geometry = 'CURVEPOLYGON(CIRCULARSTRING(1 3, 3 5, 4 7, 7 3, 1 3))';  
SELECT @g1.STIsValid(), @g2.STIsValid();  

CurvePolygon 인스턴스의 유효성 규칙은 Polygon 인스턴스의 유효성 규칙과 동일합니다. 단, CurvePolygon 인스턴스는 새 원호 세그먼트 유형을 허용할 수 있습니다.CurvePolygon instances have the same validity rules as Polygon instances with the exception that CurvePolygon instances may accept the new circular arc segment types. 유효하거나 유효하지 않은 인스턴스에 대한 다른 예는 Polygon을 참조하십시오.For more examples of instances that are valid or not valid, see Polygon.

Geography 데이터 형식Geography data type

유효한 geographyCurvePolygon 인스턴스는 다음 특성을 포함해야 합니다.A valid geographyCurvePolygon instance must have the following attributes:

  1. 다각형 내부는 왼쪽 규칙을 사용하여 연결됩니다.The interior of the polygon is connected using the left-hand rule.

  2. 링은 자체적으로 또는 다른 링을 교차할 수 없습니다.No ring can cross itself or another ring.

  3. 링은 단일 탄젠트 점(링 접촉이 한정된 점 수)에서만 접할 수 있습니다.Rings can only touch at single tangent points (number of points where rings touch must be finite).

  4. 다각형 내부는 연결되어야 합니다.The interior of the polygon must be connected.

    다음 예에서는 유효한 geography CurvePolygon 인스턴스를 보여 줍니다.The following example shows a valid geography CurvePolygon instance.

DECLARE @g geography = 'CURVEPOLYGON((-122.3 47, 122.3 47, 125.7 49, 121 38, -122.3 47))';  
SELECT @g.STIsValid();  

Examples

1.A. 빈 CurvePolygon을 사용하여 Geometry 인스턴스 인스턴스화Instantiating a Geometry Instance with an Empty CurvePolygon

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

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

2.B. 동일한 문에서 CurvePolygon을 사용하여 Geometry 인스턴스 선언 및 인스턴스화Declaring and Instantiating a Geometry Instance with a CurvePolygon in the Same Statement

이 코드 조각은 동일한 문에서 CurvePolygon 을 사용하여 geography 인스턴스를 선언하고 초기화하는 방법을 보여 줍니다.This code snippet shows how to declare and initialize a geometry instance with a CurvePolygon in the same statement:

DECLARE @g geometry = 'CURVEPOLYGON(CIRCULARSTRING(2 4, 4 2, 6 4, 4 6, 2 4))'  

3.C. CurvePolygon을 사용하여 Geography 인스턴스 인스턴스화Instantiating a Geography Instance with a CurvePolygon

이 코드 조각은 geography 을 사용하여 CurvePolygon인스턴스를 선언하고 초기화하는 방법을 보여 줍니다.This code snippet shows how to declare and initialize a geography instance with a CurvePolygon:

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

4.D. 외부 경계 링만 사용하여 CurvePolygon 저장Storing a CurvePolygon with Only an Exterior Bounding Ring

이 예에서는 단순 원을 CurvePolygon 인스턴스에 저장하는 방법을 보여 줍니다. 외부 경계 링만 사용하여 원을 정의합니다.This example shows how to store a simple circle in a CurvePolygon instance (only an exterior bounding ring is used to define the circle):

DECLARE @g geometry;  
SET @g = geometry::Parse('CURVEPOLYGON(CIRCULARSTRING(2 4, 4 2, 6 4, 4 6, 2 4))');  
SELECT @g.STArea() AS Area;  

5.E. 내부 링을 포함하는 CurvePolygon 저장Storing a CurvePolygon Containing Interior Rings

이 예에서는 CurvePolygon 인스턴스에서 도넛형을 만듭니다. 외부 경계 링과 내부 링을 모두 사용하여 도넛형을 정의합니다.This example creates a donut in a CurvePolygon instance (both an exterior bounding ring and an interior ring is used to define the donut):

DECLARE @g geometry;  
SET @g = geometry::Parse('CURVEPOLYGON(CIRCULARSTRING(0 4, 4 0, 8 4, 4 8, 0 4), CIRCULARSTRING(2 4, 4 2, 6 4, 4 6, 2 4))');  
SELECT @g.STArea() AS Area;  

이 예에서는 내부 링을 사용할 때 유효하지 않은 인스턴스 및 유효한 CurvePolygon 인스턴스를 모두 보여 줍니다.This example shows both a valid CurvePolygon instance and an invalid instance when using interior rings:

DECLARE @g1 geometry, @g2 geometry;  
SET @g1 = geometry::Parse('CURVEPOLYGON(CIRCULARSTRING(0 5, 5 0, 0 -5, -5 0, 0 5), (-2 2, 2 2, 2 -2, -2 -2, -2 2))');  
IF @g1.STIsValid() = 1  
  BEGIN  
     SELECT @g1.STArea();  
  END  
SET @g2 = geometry::Parse('CURVEPOLYGON(CIRCULARSTRING(0 5, 5 0, 0 -5, -5 0, 0 5), (0 5, 5 0, 0 -5, -5 0, 0 5))');  
IF @g2.STIsValid() = 1  
  BEGIN  
     SELECT @g2.STArea();  
  END  
SELECT @g1.STIsValid() AS G1, @g2.STIsValid() AS G2;  

@g1과 @g2 모두 동일한 외부 경계 링을 사용합니다. 이 원의 반지름은 5이고 둘 다 내부 링에 대해 사각형을 사용합니다.Both @g1 and @g2 use the same exterior bounding ring: a circle with a radius of 5 and they both use a square for an interior ring. 그러나 @g1 인스턴스는 유효하고 @g2 인스턴스는 유효하지 않습니다.However, the instance @g1 is valid, but the instance @g2 is invalid. @g2가 유효하지 않은 이유는 내부 링이 외부 링에 의해 경계가 지정된 내부 공간을 4개의 개별 영역으로 분할하기 때문입니다.The reason that @g2 is invalid is that the interior ring splits the interior space bounded by the exterior ring into four separate regions. 다음 그림에서는 이를 실행한 결과를 보여 줍니다.The following drawing shows what occurred:

참고 항목See Also

Polygon Polygon
CircularString CircularString
CompoundCurve CompoundCurve
geometry 데이터 형식 메서드 참조 geometry Data Type Method Reference
geography 데이터 형식 메서드 참조 geography Data Type Method Reference
공간 데이터 형식 개요Spatial Data Types Overview