CurvePolygon
적용 대상: SQL Server Azure SQL 데이터베이스 SQL Managed Instance
CurvePolygon은 외부 경계 링과 0개 이상의 내부 링에서 정의하는 토폴로지 방식으로 닫힌 표면입니다
Important
CurvePolygon 하위 형식을 포함하여 SQL Server 2012(11.x)에서 도입된 공간 기능에 대한 자세한 설명과 예제를 보려면 SQL Server 2012의 새로운 공간 기능백서를 다운로드하세요.
다음 조건은 CurvePolygon 인스턴스의 특성을 정의합니다.
CurvePolygon 인스턴스의 경계는 외부 링과 모든 내부 링으로 정의됩니다.
CurvePolygon 인스턴스의 내부는 외부 링과 모든 내부 링 사이의 공간입니다.
CurvePolygon 인스턴스는 Polygon 인스턴스와 다릅니다. CurvePolygon 인스턴스에는 원호 세그먼트인 CircularString 및 CompoundCurve가 포함될 수 있습니다.
CompoundCurve 인스턴스
다음 일러스트레이션에서는 유효한 CurvePolygon 그래픽 블록을 보여 줍니다.
허용되는 인스턴스
CurvePolygon 인스턴스를 허용하려면 비어 있거나 허용되는 원호 링만 포함해야 합니다. 허용되는 원호 링은 다음 요구 사항을 충족합니다.
허용되는 LineString, CircularString 또는 CompoundCurve 인스턴스입니다. 허용되는 인스턴스에 대한 자세한 내용은 LineString, CircularString및 CompoundCurve를 참조하십시오.
포인트가 최소 4개 있습니다.
시작 포인트와 끝 포인트에는 동일한 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 인스턴스의 외부 및 내부 링이 모두 유효하려면 다음 조건을 충족해야 합니다.
- 단일 접선 포인트에서만 닿을 수 있습니다.
- 서로 교차할 수 없습니다.
- 각 링에는 포인트가 최소 4개 포함되어야 합니다.
- 각 링은 허용되는 곡선 형식이어야 합니다.
CurvePolygon 인스턴스는 geometry 또는 geography 데이터 형식인지에 따라 특정 조건을 충족해야 합니다.
Geometry 데이터 형식
유효한 geometryCurvePolygon 인스턴스는 다음 특성을 포함해야 합니다.
- 모든 내부 링은 외부 링 내에 포함되어야 합니다.
- 여러 개의 내부 링이 있을 수 있지만 내부 링에는 다른 내부 링이 포함될 수 없습니다.
- 어떤 링도 자체 또는 다른 링과 교차될 수 없습니다.
- 링은 단일 접선 포인트에서만 닿을 수 있습니다(링 터치가 유한해야 하는 포인트 수).
- 다각형의 내부가 연결되어야 합니다.
다음 예제에서는 유효한 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 인스턴스는 다음 특성을 포함해야 합니다.
- 다각형의 내부는 왼쪽 규칙을 사용하여 연결됩니다.
- 어떤 링도 자체 또는 다른 링과 교차될 수 없습니다.
- 링은 단일 접선 포인트에서만 닿을 수 있습니다(링 터치가 유한해야 하는 포인트 수).
- 다각형의 내부가 연결되어야 합니다.
다음 예제에서는 유효한 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이(가) 유효하지 않은 이유는 내부 링이 외부 링으로 둘러싸인 내부 공간을 네 개의 개별 영역으로 분할하기 때문입니다. 다음 그림은 어떤 일이 발생했는지 보여 줍니다.
참고 항목
Polygon
CircularString
CompoundCurve
geometry 데이터 형식 메서드 참조
geography 데이터 형식 메서드 참조
공간 데이터 형식 개요