A Polygon 는 외부 경계 링과 0개 이상의 내부 링을 정의하는 점 시퀀스로 저장된 2차원 표면입니다.
다각형 인스턴스
인스턴스는 Polygon 3개 이상의 고유 점이 있는 링에서 형성될 수 있습니다. 인스턴스는 Polygon 비어 있을 수도 있습니다.
외부 링 및 내부 링은 Polygon의 경계를 정의합니다. 링 내의 공간은 Polygon의 내부를 정의합니다.
아래 그림에서는 인스턴스의 Polygon 예를 보여 줍니다.
그림과 같이 다음을 수행합니다.
그림 1은
Polygon외부 링에 의해 경계가 정의된 인스턴스입니다.그림 2는
Polygon외부 링과 두 개의 내부 링으로 경계가 정의된 인스턴스입니다. 내부 링의 영역은 인스턴스 외부의 일부입니다.그림 3은 내부 링이 단일 탄젠트 지점에서 교차하기 때문에 유효한
Polygon인스턴스입니다.
허용되는 인스턴스
허용되는 Polygon 인스턴스는 예외를 throw하지 않고 변수 geometry 또는 geography 변수에 저장할 수 있는 인스턴스입니다. 허용되는 인스턴스는 Polygon 다음과 같습니다.
빈
Polygon인스턴스Polygon허용되는 외부 링과 0개 이상의 허용 가능한 내부 링이 있는 인스턴스
링이 허용되려면 다음 조건이 필요합니다.
LineString인스턴스를 수락해야 합니다.인스턴스에는
LineString4개 이상의 지점이 있어야 합니다.인스턴스의 시작점과 끝점은
LineString동일해야 합니다.
다음 예제에서는 허용되는 Polygon 인스턴스를 보여 줍니다.
DECLARE @g1 geometry = 'POLYGON EMPTY';
DECLARE @g2 geometry = 'POLYGON((1 1, 3 3, 3 1, 1 1))';
DECLARE @g3 geometry = 'POLYGON((-5 -5, -5 5, 5 5, 5 -5, -5 -5),(0 0, 3 0, 3 3, 0 3, 0 0))';
DECLARE @g4 geometry = 'POLYGON((-5 -5, -5 5, 5 5, 5 -5, -5 -5),(3 0, 6 0, 6 3, 3 3, 3 0))';
DECLARE @g5 geometry = 'POLYGON((1 1, 1 1, 1 1, 1 1))';
@g4와 @g5에서 보이듯이, 허용되는 Polygon 인스턴스는 유효한 Polygon 인스턴스가 아닐 수 있습니다.
@g5 또한 Polygon 인스턴스는 네 점이 포함된 링만 있으면 수락된다는 것을 보여줍니다.
다음 예제들은 Polygon 인스턴스가 허용되지 않기 때문에 System.FormatException를 발생시킵니다.
DECLARE @g1 geometry = 'POLYGON((1 1, 3 3, 1 1))';
DECLARE @g2 geometry = 'POLYGON((1 1, 3 3, 3 1, 1 5))';
@g1 외부 링의 인스턴스에 포인트가 LineString 충분하지 않기 때문에 허용되지 않습니다.
@g2 외부 링 LineString 인스턴스의 시작점이 끝점과 같지 않기 때문에 허용되지 않습니다. 다음 예제에는 허용 가능한 외부 링이 있지만 내부 링은 허용되지 않습니다. 이 경우에도 System.FormatException이(가) throw됩니다.
DECLARE @g geometry = 'POLYGON((-5 -5, -5 5, 5 5, 5 -5, -5 -5),(0 0, 3 0, 0 0))';
유효한 인스턴스
하나의 Polygon 내부 링은 단일 접점에서 서로 닿을 수 있지만, Polygon 내부 링이 교차하는 경우, 인스턴스는 유효하지 않습니다.
다음 예제에서는 유효한 Polygon 인스턴스를 보여 줍니다.
DECLARE @g1 geometry = 'POLYGON((-20 -20, -20 20, 20 20, 20 -20, -20 -20))';
DECLARE @g2 geometry = 'POLYGON((-20 -20, -20 20, 20 20, 20 -20, -20 -20), (10 0, 0 10, 0 -10, 10 0))';
DECLARE @g3 geometry = 'POLYGON((-20 -20, -20 20, 20 20, 20 -20, -20 -20), (10 0, 0 10, 0 -10, 10 0), (-10 0, 0 10, -5 -10, -10 0))';
SELECT @g1.STIsValid(), @g2.STIsValid(), @g3.STIsValid();
@g3 는 두 개의 내부 링이 한 지점에서 터치하고 서로 교차하지 않기 때문에 유효합니다. 다음 예제에서는 유효하지 않은 Polygon 인스턴스를 보여줍니다.
DECLARE @g1 geometry = 'POLYGON((-20 -20, -20 20, 20 20, 20 -20, -20 -20), (20 0, 0 10, 0 -20, 20 0))';
DECLARE @g2 geometry = 'POLYGON((-20 -20, -20 20, 20 20, 20 -20, -20 -20), (10 0, 0 10, 0 -10, 10 0), (5 0, 1 5, 1 -5, 5 0))';
DECLARE @g3 geometry = 'POLYGON((-20 -20, -20 20, 20 20, 20 -20, -20 -20), (10 0, 0 10, 0 -10, 10 0), (-10 0, 0 10, 0 -10, -10 0))';
DECLARE @g4 geometry = 'POLYGON((-20 -20, -20 20, 20 20, 20 -20, -20 -20), (10 0, 0 10, 0 -10, 10 0), (-10 0, 1 5, 0 -10, -10 0))';
DECLARE @g5 geometry = 'POLYGON((10 0, 0 10, 0 -10, 10 0), (-20 -20, -20 20, 20 20, 20 -20, -20 -20) )';
DECLARE @g6 geometry = 'POLYGON((1 1, 1 1, 1 1, 1 1))';
SELECT @g1.STIsValid(), @g2.STIsValid(), @g3.STIsValid(), @g4.STIsValid(), @g5.STIsValid(), @g6.STIsValid();
@g1 내부 링이 두 위치에서 외부 링에 닿기 때문에 유효하지 않습니다.
@g2 는 두 번째 내부 링이 첫 번째 내부 링의 내부 내에 있기 때문에 유효하지 않습니다.
@g3 는 두 개의 내부 링이 여러 개의 연속 지점에서 터치하기 때문에 유효하지 않습니다.
@g4 는 두 내부 링의 내부가 겹치므로 유효하지 않습니다.
@g5 외부 링이 첫 번째 링이 아니므로 유효하지 않습니다.
@g6 은 링에 세 개 이상의 별개의 점이 없으므로 유효하지 않습니다.
예시
다음 예제에서는 구멍과 SRID 10이 있는 간단한 geometry``Polygon 인스턴스를 만듭니다.
DECLARE @g geometry;
SET @g = geometry::STPolyFromText('POLYGON((0 0, 0 3, 3 3, 3 0, 0 0), (1 1, 1 2, 2 1, 1 1))', 10);
유효하지 않은 Aninstance를 입력하고 유효한 geometry 인스턴스로 변환할 수 있습니다. 다음 예제 Polygon에서는 내부 및 외부 링이 겹치고 인스턴스가 잘못되었습니다.
DECLARE @g geometry;
SET @g = geometry::Parse('POLYGON((1 0, 0 1, 1 2, 2 1, 1 0), (2 0, 1 1, 2 2, 3 1, 2 0))');
다음 예제에서는 잘못된 인스턴스를 MakeValid()와 함께 유효하게 합니다.
SET @g = @g.MakeValid();
SELECT @g.ToString();
geometry 위의 예제에서 반환된 인스턴스는 .입니다MultiPolygon.
MULTIPOLYGON (((2 0, 3 1, 2 2, 1.5 1.5, 2 1, 1.5 0.5, 2 0)), ((1 0, 1.5 0.5, 1 1, 1.5 1.5, 1 2, 0 1, 1 0)))
다음은 잘못된 인스턴스를 유효한 기하 도형 인스턴스로 변환하는 또 다른 예입니다. 다음 예제 Polygon 에서 인스턴스는 정확히 동일한 세 점을 사용하여 만들어졌습니다.
DECLARE @g geometry
SET @g = geometry::Parse('POLYGON((1 3, 1 3, 1 3, 1 3))');
SET @g = @g.MakeValid();
SELECT @g.ToString()
위에서 반환된 기하 도형 인스턴스는 .입니다 Point(1 3).
Polygon으로 지정된 POLYGON((1 3, 1 5, 1 3, 1 3))이(가) MakeValid()이면 LINESTRING(1 3, 1 5)을(를) 반환합니다.
또한 참조하십시오
STArea (geometry 자료 형식)STExteriorRing (geometry 자료 형식)STNumInteriorRing (geometry 자료 형식)STInteriorRingN (geometry 자료 형식)STCentroid (geometry 자료 형식)STPointOnSurface (geometry 자료 형식)멀티폴리곤공간 데이터 (SQL Server)STIsValid (geography 자료 형식)STIsValid (geometry 자료 형식)