CurvePolygon

적용 대상:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

CurvePolygon은 외부 경계 링과 0개 이상의 내부 링으로 정의된 토폴로지로 닫힌 표면입니다.

Important

CurvePolygon 하위 형식을 포함하여 SQL Server 2012(11.x)에 도입된 공간 기능에 대한 자세한 설명과 예제를 보려면 SQL Server 2012의 새 공간 기능 백서를 다운로드하세요.

다음 조건은 CurvePolygon 인스턴스의 특성을 정의합니다.

  • CurvePolygon 인스턴스의 경계는 외부 링과 모든 내부 링으로 정의됩니다.

  • CurvePolygon 인스턴스의 내부는 외부 링과 모든 내부 링 사이의 공간입니다.

CurvePolygon 인스턴스는 Polygon 인스턴스와 다릅니다. CurvePolygon 인스턴스에는 원호 세그먼트인 CircularStringCompoundCurve가 포함될 수 있습니다.

CompoundCurve 인스턴스

아래 그림에서는 유효한 CurvePolygon 그림을 보여 줍니다.

허용되는 인스턴스

CurvePolygon 인스턴스를 허용하려면 비어 있거나 허용되는 원호 링만 포함해야 합니다. 허용되는 원호 링은 다음 요구 사항을 충족합니다.

  1. 허용되는 LineString, CircularString 또는 CompoundCurve 인스턴스입니다. 허용되는 인스턴스에 대한 자세한 내용은 LineString, CircularStringCompoundCurve를 참조하십시오.

  2. 4점 이상 있습니다.

  3. 시작점과 끝점에는 동일한 X 및 Y 좌표가 있습니다.

    참고 항목

    Z 및 M 값은 무시됩니다.

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

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 는 Z 값이 무시되므로 시작점과 끝점의 Z 값이 다르더라도 허용됩니다. @g5는 지리 유형 인스턴스가 유효하지 않더라도 허용됩니다.

다음 예에서는 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 는 시작점과 끝점의 Y 값이 같지 않기 때문에 허용되지 않습니다. @g2 은 링에 포인트가 충분하지 않기 때문에 허용되지 않습니다.

유효한 인스턴스

CurvePolygon 인스턴스의 경우 외부 및 내부 링이 모두 유효하려면 다음 조건을 충족해야 합니다.

  1. 단일 탄젠트 지점에서만 터치할 수 있습니다.
  2. 그들은 서로 교차 할 수 없습니다.
  3. 각 링에는 4개 이상의 점이 포함되어야 합니다.
  4. 각 링은 허용되는 곡선 유형이어야 합니다.

CurvePolygon 인스턴스는 기하 도형 또는 지리 데이터 형식인지에 따라 특정 조건을 충족해야 합니다.

Geometry 데이터 형식

유효한 geometryCurvePolygon 인스턴스에는 다음 특성이 있어야 합니다.

  1. 모든 내부 링은 외부 링 내에 포함되어야 합니다.
  2. 여러 개의 내부 링이 있을 수 있지만 내부 링에는 다른 내부 링이 포함될 수 없습니다.
  3. 어떤 링도 자체 또는 다른 링을 교차할 수 없습니다.
  4. 링은 단일 탄젠트 지점에서만 터치할 수 있습니다(링 터치가 유한해야 하는 지점 수).
  5. 다각형의 내부를 연결해야 합니다.

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

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 인스턴스는 CurvePolygon 인스턴스가 새 원호 세그먼트 형식을 수락할 수 있다는 예외를 제외하고 Polygon 인스턴스와 동일한 유효성 규칙을 갖습니다. 유효하거나 유효하지 않은 인스턴스의 더 많은 예제는 Polygon을 참조 하세요.

Geography 데이터 형식

유효한 geographyCurvePolygon 인스턴스는 다음 특성을 포함해야 합니다.

  1. 다각형의 내부는 왼쪽 규칙을 사용하여 연결됩니다.
  2. 어떤 링도 자체 또는 다른 링을 교차할 수 없습니다.
  3. 링은 단일 탄젠트 지점에서만 터치할 수 있습니다(링 터치가 유한해야 하는 지점 수).
  4. 다각형의 내부를 연결해야 합니다.

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

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

A. 빈 CurvePolygon을 사용하여 Geometry 인스턴스 인스턴스화

이 예제에서는 빈 CurvePolygon 인스턴스를 만드는 방법을 보여 줍니다.

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

B. 같은 문에서 CurvePolygon을 사용하여 Geometry 인스턴스 선언 및 인스턴스화

이 코드 조각은 동일한 문에서 CurvePolygon을 사용하여 기하 도형 인스턴스를 선언하고 초기화하는 방법을 보여 줍니다.

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

C. CurvePolygon을 사용하여 Geography 인스턴스 인스턴스화

이 코드 조각은 geography 을 사용하여 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))';  

D. 외부 경계 링만 사용하여 CurvePolygon 저장

이 예제에서는 CurvePolygon 인스턴스에 단순 원을 저장하는 방법을 보여 줍니다(외부 경계 링만 원을 정의하는 데 사용됨).

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

E. 내부 링이 포함된 CurvePolygon 저장

이 예제에서는 CurvePolygon 인스턴스에 도넛을 만듭니다(외부 경계 링과 내부 링은 모두 도넛을 정의하는 데 사용됩니다.)

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 인스턴스를 모두 보여 줍니다.

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;  

@g2 둘 다 @g1 동일한 외부 경계 링을 사용합니다. 반경이 5인 원은 둘 다 내부 링에 사각형을 사용합니다. 그러나 인스턴스 @g1 는 유효하지만 인스턴스 @g2 가 잘못되었습니다. 잘못된 이유는 내부 링이 @g2 외부 링으로 경계가 지정된 내부 공간을 4개의 개별 영역으로 분할하기 때문입니다. 다음 드로잉은 발생한 내용을 보여줍니다.

참고 항목

Polygon
CircularString
CompoundCurve
geometry 데이터 형식 메서드 참조
geography 데이터 형식 메서드 참조
공간 데이터 형식 개요