다음을 통해 공유


CurvePolygon

적용 대상: Microsoft Fabric의 Microsoft Fabric SQL 데이터베이스에 있는 Microsoft Fabric Warehouse의 SQL Server Azure SQL Database Azure SQL Managed Instance SQL 분석 엔드포인트

CurvePolygon은 외부 경계 링과 SQL 데이터베이스 엔진 공간 데이터에서 0개 이상의 내부 링으로 정의된 토폴로지로 닫힌 표면입니다.

Important

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

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

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

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

CurvePolygon 인스턴스는 CurvePolygon 인스턴스에 CircularString 및 CompoundCurve와 같은 원호 세그먼트를 포함할 수 있다는 점에서 다각형 인스턴스와 다릅니다.

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

Z 값은 무시되기 때문에 시작 포인트와 끝 포인트가 서로 다른 Z 값을 가지고 있어도 @g3이(가) 허용됩니다. geography 형식 인스턴스가 유효하지 않더라도 @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))';  

시작 포인트와 끝 포인트의 Y값이 같지 않기 때문에 @g1은(는) 허용되지 않습니다. 링에 포인트가 충분하지 않기 때문에 @g2은(는) 허용되지 않습니다.

유효한 인스턴스

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

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

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

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으로 geography 인스턴스를 선언하고 초기화하는 방법을 보여 줍니다.

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;  

@g1@g2 둘 다 동일한 외부 경계 링을 사용합니다. 반경이 5인 원은 둘 다 내부 링에 사각형을 사용합니다. 그러나 @g1 인스턴스는 유효하고 @g2 인스턴스는 유효하지 않습니다. @g2이(가) 유효하지 않은 이유는 내부 링이 외부 링으로 둘러싸인 내부 공간을 네 개의 개별 영역으로 분할하기 때문입니다. 다음 그림은 어떤 일이 발생했는지 보여 줍니다.