다각형Polygon

Polygon 은 외부 경계 링과 0개 이상의 내부 링을 정의하는 일련의 점으로 저장되는 2차원 표면입니다.A Polygon is a two-dimensional surface stored as a sequence of points defining an exterior bounding ring and zero or more interior rings.

Polygon 인스턴스Polygon instances

Polygon 인스턴스는 서로 다른 점이 3개 이상 있는 링에서 구성될 수 있습니다.A Polygon instance can be formed from a ring that has at least three distinct points. Polygon 인스턴스가 비어 있을 수도 있습니다.A Polygon instance can also be empty.

Polygon 의 외부 및 내부 링은 해당 경계를 정의합니다.The exterior and any interior rings of a Polygon define its boundary. 링 내부 공간은 Polygon의 내부를 정의합니다.The space within the rings defines the interior of the Polygon.

다음 그림에서는 Polygon 인스턴스의 예를 보여 줍니다.The illustration below shows examples of Polygon instances.

기하 도형 Polygon 인스턴스의 예Examples of geometry Polygon instances

그림에 대한 설명:As shown in the illustration:

  1. 그림 1은 외부 링에서 정의한 경계가 있는 Polygon 인스턴스입니다.Figure 1 is a Polygon instance whose boundary is defined by an exterior ring.

  2. 그림 2는 외부 링 및 두 개의 내부 링에서 정의한 경계가 있는 Polygon 인스턴스입니다.Figure 2 is a Polygon instance whose boundary is defined by an exterior ring and two interior rings. 내부 링 내의 영역이 Polygon 인스턴스 외부의 일부분입니다.The area inside the interior rings is part of the exterior of the Polygon instance.

  3. 그림 3은 Polygon 인스턴스의 내부 링이 하나의 탄젠트 점에서 교차하므로 올바른 인스턴스입니다.Figure 3 is a valid Polygon instance because its interior rings intersect at a single tangent point.

허용되는 인스턴스Accepted instances

허용되는 Polygon 인스턴스는 예외를 발생시키지 않고 geometry 또는 geography 변수에 저장할 수 있는 인스턴스입니다.Accepted Polygon instances are instances that can be stored in a geometry or geography variable without throwing an exception. 다음 Polygon 인스턴스가 허용됩니다.The following are accepted Polygon instances:

  • Polygon 인스턴스An Empty Polygon instance

  • 허용 가능 외부 링 및 0개 이상의 허용 가능 내부 링을 포함하는 Polygon 인스턴스A Polygon instance that has an acceptable exterior ring and zero or more acceptable interior rings

    링이 허용되려면 다음 조건을 충족해야 합니다.The following criteria are needed for a ring to be acceptable.

  • LineString 인스턴스가 허용되어야 합니다.The LineString instance must be accepted.

  • LineString 인스턴스에 4개 이상의 점이 있어야 합니다.The LineString instance must have at least four points.

  • LineString 인스턴스의 시작점 및 끝점이 같아야 합니다.The starting and ending points of the LineString instance must be the same.

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

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 인스턴스가 아닐 수 있습니다.As @g4 and @g5 show an accepted Polygon instance may not be a valid Polygon instance. @g5 도 Polygon 인스턴스가 허용될 4개의 점이 있는 링만 포함해야 함을 보여 줍니다.@g5 also shows that a Polygon instance needs to only contain a ring with any four points to be accepted.

다음 예에서는 System.FormatException Polygon 인스턴스가 허용되지 않으므로 이 발생합니다.The following examples throw a System.FormatException because the Polygon instances are not accepted.

DECLARE @g1 geometry = 'POLYGON((1 1, 3 3, 1 1))';  
DECLARE @g2 geometry = 'POLYGON((1 1, 3 3, 3 1, 1 5))';  

@g1 외부 링에 대한 LineString 인스턴스에 점이 부족하기 때문에 허용되지 않습니다.@g1 is not accepted because the LineString instance for the exterior ring does not contain enough points. @g2 외부 링 LineString 인스턴스의 시작 점이 끝 점과 같지 않기 때문에 허용되지 않습니다.@g2 is not accepted because the starting point of the exterior ring LineString instance is not the same as the ending point. 다음 예에는 허용 가능한 외부 링이 있지만 내부 링은 허용되지 않습니다.The following example has an acceptable exterior ring, but the interior ring is not acceptable. 여기서도 System.FormatException이 발생합니다.This also throws a System.FormatException.

DECLARE @g geometry = 'POLYGON((-5 -5, -5 5, 5 5, 5 -5, -5 -5),(0 0, 3 0, 0 0))';  

유효한 인스턴스Valid instances

Polygon 의 내부 링은 자신들과 서로 다른 링 모두 하나의 탄젠트 점에서 인접할 수 있지만 Polygon 의 내부 링이 교차할 경우 해당 인스턴스가 유효하지 않습니다.The interior rings of a Polygon can touch both themselves and each other at single tangent points, but if the interior rings of a Polygon cross, the instance is not valid.

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

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 이 유효합니다.@g3 is valid because the two interior rings touch at a single point and do not cross each other. 다음 예에서는 유효하지 않은 Polygon 인스턴스를 보여 줍니다.The following example shows Polygon instances that are not valid.

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 이 유효하지 않습니다.@g1 is not valid because the inner ring touches the exterior ring in two places. @g2 가 유효하지 않습니다.@g2 is not valid because the second inner ring in within the interior of the first inner ring. @g3 이 두 내부 링이 여러 연속 점에서 접하기 때문에 유효하지 않습니다.@g3 is not valid because the two inner rings touch at multiple consecutive points. @g4 가 유효하지 않습니다.@g4 is not valid because the interiors of the two inner rings overlap. @g5 가 유효하지 않습니다.@g5 is not valid because the exterior ring is not the first ring. @g6 이 유효하지 않습니다.@g6 is not valid because the ring does not have at least three distinct points.

Examples

다음 예에서는 구멍이 있고 SRID가 10인 단순한 geometry``Polygon 인스턴스를 만듭니다.The following example creates a simple geometry``Polygon instance with a hole and SRID 10.

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

유효하지 않은 인스턴스는 유효한 geometry 인스턴스에 입력되고 변환될 수도 있습니다.Aninstance that is not valid may be entered and converted to a valid geometry instance. 다음 Polygon의 예에서는 내부 및 외부 링이 겹치고 인스턴스가 유효하지 않습니다.In the following example of a Polygon, the interior and exterior rings overlap and the instance is not valid.

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()를 사용하여 유효하게 됩니다.In the following example, the invalid instance is made valid with MakeValid().

SET @g = @g.MakeValid();  
SELECT @g.ToString();  

위의 예에서 반환된 geometry 인스턴스는 MultiPolygon입니다.The geometry instance returned from the above example is a 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)))  

다음은 유효하지 않은 인스턴스를 유효한 geometry 인스턴스로 변환하는 다른 예입니다.Here is another example of converting an invalid instance to a valid geometry instance. 다음 예에서는 정확하게 서로 동일한 점 세 개를 사용하여 Polygon 인스턴스를 만들었습니다.In the following example the Polygon instance has been created using three points that are exactly the same:

DECLARE @g geometry  
SET @g = geometry::Parse('POLYGON((1 3, 1 3, 1 3, 1 3))');  
SET @g = @g.MakeValid();  
SELECT @g.ToString()  

위에서 반환된 geometry 인스턴스는 Point(1 3)입니다.The geometry instance returned above is a Point(1 3). 지정한 PolygonPOLYGON((1 3, 1 5, 1 3, 1 3)) 이면 MakeValid() 에서 LINESTRING(1 3, 1 5)를 반환합니다.If the Polygon given is POLYGON((1 3, 1 5, 1 3, 1 3)) then MakeValid() would return LINESTRING(1 3, 1 5).

참고 항목See Also

STArea(geometry 데이터 형식) STArea (geometry Data Type)
STExteriorRing(geometry 데이터 형식) STExteriorRing (geometry Data Type)
STNumInteriorRing(geometry 데이터 형식) STNumInteriorRing (geometry Data Type)
STInteriorRingN(geometry 데이터 형식) STInteriorRingN (geometry Data Type)
STCentroid(geometry 데이터 형식) STCentroid (geometry Data Type)
STPointOnSurface(geometry 데이터 형식) STPointOnSurface (geometry Data Type)
MultiPolygon MultiPolygon
공간 데이터(SQL Server) Spatial Data (SQL Server)
STIsValid(geography 데이터 형식) STIsValid (geography Data Type)
STIsValid(geometry 데이터 형식) STIsValid (geometry Data Type)