geometry 인스턴스 만들기, 구성 및 쿼리

평면 공간 데이터 형식 geometry는 유클리드(평면) 좌표계의 데이터를 나타냅니다. 이 형식은 SQL Server에서 CLR(공용 언어 런타임) 데이터 형식으로 구현됩니다.

geometry 형식은 각 데이터베이스에서 미리 정의되고 사용할 수 있습니다. 다른 CLR 형식을 사용할 때와 동일한 방식으로 geometry 형식의 테이블 열을 만들고 geometry 데이터에 대한 작업을 수행할 수 있습니다.

SQL Server 지원하는 데이터 형식(평면)은 geometry SQL 사양 버전 1.1.0에 대한 OGC(Open Geospatial Consortium) 단순 기능을 준수합니다.

OGC 사양에 대한 자세한 내용은 다음을 참조하십시오.

SQL Server에서는 https://schemas.microsoft.com/sqlserver/profiles/gml/SpatialGML.xsd 스키마에 정의된 기존 GML 3.1 표준의 하위 집합을 지원합니다.

새 geometry 인스턴스 만들기 또는 구성

기존 인스턴스에서 새 geometry 인스턴스 만들기

geometry 데이터 형식은 수많은 기본 메서드를 제공합니다. 이러한 메서드를 사용하여 기존 인스턴스에 기반하여 새 geometry 인스턴스를 만들 수 있습니다.

geometry 버퍼를 만들려면
STBuffer(geometry 데이터 형식)

BufferWithTolerance(geometry 데이터 형식)

간단한 geometry 버전을 만들려면
Reduce(geometry 데이터 형식)

geometry의 네 점을 만들려면
STConvexHull(geometry 데이터 형식)

두 geometry의 교집합에서 geometry를 만들려면
STIntersection(geometry 데이터 형식)

두 geometry의 합집합에서 geometry를 만들려면
STUnion(geometry 데이터 형식)

한 geometry가 다른 geometry와 겹치지 않는 점에서 geometry를 만들려면
STDifference(geometry 데이터 형식)

두 geometry가 겹치지 않는 점에서 geometry를 만들려면
STSymDifference(geometry 데이터 형식)

기존 geometry에 있는 임의의 Point 인스턴스를 만들려면
STPointOnSurface(geometry 데이터 형식)

WKT 입력에서 geometry 인스턴스 구성

geometry 데이터 형식은 OGC(Open Geospatial Consortium) WKT 표현에서 기하 도형을 생성하는 여러 가지 기본 메서드를 제공합니다. WKT 표준은 기하 도형 데이터를 텍스트 형식으로 교환할 수 있는 텍스트 문자열입니다.

WKT 입력에서 모든 유형의 geometry 인스턴스를 생성하려면
STGeomFromText(geometry 데이터 형식)

Parse(geometry 데이터 형식)

WKT 입력에서 기하 도형 Point 인스턴스를 생성하려면
STPointFromText(geometry 데이터 형식)

WKT 입력에서 기하 도형 MultiPoint 인스턴스를 생성하려면
STMPointFromText(geometry 데이터 형식)

WKT 입력에서 기하 도형 LineString 인스턴스를 생성하려면
STLineFromText(geometry 데이터 형식)

WKT 입력에서 기하 도형 MultiLineString 인스턴스를 생성하려면
STMLineFromText(geometry 데이터 형식)

WKT 입력에서 기하 도형 Polygon 인스턴스를 생성하려면
STPolyFromText(geometry 데이터 형식)

WKT 입력에서 기하 도형 MultiPolygon 인스턴스를 생성하려면
STMPolyFromText(geometry 데이터 형식)

WKT 입력에서 기하 도형 GeometryCollection 인스턴스를 생성하려면
STGeomCollFromText(geometry 데이터 형식)

WKB 입력에서 geometry 인스턴스 구성

WKB는 OGC(Open Geospatial Consortium)에서 지정한 이진 형식으로, 클라이언트 애플리케이션과 SQL 데이터베이스 간에 geometry 데이터를 교환하도록 허용합니다. 다음 함수는 WKB 입력을 사용하여 기하 도형을 생성합니다.

WKB 입력에서 모든 유형의 geometry 인스턴스를 생성하려면
STGeomFromWKB(geometry 데이터 형식)

WKB 입력에서 기하 도형 Point 인스턴스를 생성하려면
STPointFromWKB(geometry 데이터 형식)

WKB 입력에서 기하 도형 MultiPoint 인스턴스를 생성하려면
STMPointFromWKB(geometry 데이터 형식)

WKB 입력에서 기하 도형 LineString 인스턴스를 생성하려면
STLineFromWKB(geometry 데이터 형식)

WKB 입력에서 기하 도형 MultiLineString 인스턴스를 생성하려면
STMLineFromWKB(geometry 데이터 형식)

WKB 입력에서 기하 도형 Polygon 인스턴스를 생성하려면
STPolyFromWKB(geometry 데이터 형식)

WKB 입력에서 기하 도형 MultiPolygon 인스턴스를 생성하려면
STMPolyFromWKB(geometry 데이터 형식)

WKB 입력에서 기하 도형 GeometryCollection 인스턴스를 생성하려면
STGeomCollFromWKB(geometry 데이터 형식)

GML 텍스트 입력에서 geometry 인스턴스 구성

데이터 형식은 geometry 기하학적 개체의 XML 표현인 geometry GML에서 instance 생성하는 메서드를 제공합니다. SQL Server 는 GML 하위 집합을 지원합니다.

GML 입력에서 모든 유형의 geometry 인스턴스를 생성하려면
GeomFromGml(geometry 데이터 형식)

geometry 인스턴스에서 WKT 및 WKB 반환

다음 메서드를 사용하여 geometry 인스턴스의 WKT 또는 WKB 형식을 반환할 수 있습니다.

geometry 인스턴스의 WKT 표현을 반환하려면
STAsText(geometry 데이터 형식)

ToString(geometry 데이터 형식)

Z 및 M 값을 포함하여 geometry 인스턴스의 WKT 표현을 반환하려면
AsTextZM(geometry 데이터 형식)

geometry 인스턴스의 WKB 표현을 반환하려면
STAsBinary(geometry 데이터 형식)

geometry 인스턴스의 GML 표현을 반환하려면
AsGml(geometry 데이터 형식)

geometry 인스턴스의 속성 및 동작 쿼리

모든 geometry 인스턴스에는 SQL Server 제공하는 메서드를 통해 검색할 수 있는 여러 속성이 있습니다. 다음 항목에서는 기하 도형 형식의 속성과 동작 및 각각을 쿼리하는 메서드를 정의합니다.

유효성, 인스턴스 유형 및 GeometryCollection 정보

geometry 인스턴스가 생성되면 다음 메서드를 사용하여 이 인스턴스가 올바른 형식일 경우 인스턴스 유형을 반환하는지 또는 컬렉션 인스턴스일 경우 특정 geometry 인스턴스를 반환하는지를 확인할 수 있습니다.

geometry 인스턴스 유형을 반환하려면
STGeometryType(geometry 데이터 형식)

기하 도형이 지정된 인스턴스 유형인지 확인하려면
InstanceOf(geometry 데이터 형식)

geometry 인스턴스가 해당 인스턴스 유형에 대해 형식이 올바른지 확인하려면
STIsValid(geometry 데이터 형식)

geometry 인스턴스를 인스턴스 유형이 있는 올바른 형식의 geometry 인스턴스로 변환하려면
MakeValid(geometry 데이터 형식)

기하 도형 컬렉션 인스턴스에 있는 기하 도형의 개수를 반환하려면
STNumGeometries(geometry 데이터 형식)

기하 도형 컬렉션 인스턴스에서 특정 기하 도형을 반환하려면
STGeometryN(geometry 데이터 형식)STGeometryN(geometry 데이터 형식)

점 수

모든 흠 없는 geometry 인스턴스는 포인트로 구성됩니다. 이러한 점은 기하 도형이 그려지는 평면의 X 및 Y 좌표를 나타냅니다. geometry는 인스턴스의 점을 쿼리하는 데 필요한 수많은 기본 메서드를 제공합니다.

인스턴스를 구성하는 점 개수를 반환하려면
STNumPoints(geometry 데이터 형식)

인스턴스의 특정 점을 반환하려면
STPointN

인스턴스에 있는 임의의 점을 반환하려면
STPointOnSurface

인스턴스의 시작점을 반환하려면
STStartPoint

인스턴스의 끝점을 반환하려면
STEndpoint

Point 인스턴스의 X 좌표를 반환하려면
STX(geometry 데이터 형식)

Point 인스턴스의 Y 좌표를 반환하려면
STY

Polygon, CurvePolygon 또는 MultiPolygon 인스턴스의 기하학적 중심점을 반환하려면
STCentroid

차원

비어 있지 않은 geometry 인스턴스는 0, 1 또는 2차원이 될 수 있습니다. geometriesPoint와 같은 0차원 MultiPoint에는 길이 또는 영역이 없습니다. LineString, CircularString, CompoundCurveMultiLineString과 같은 1차원 개체에는 길이가 있고, Polygon, CurvePolygonMultiPolygon과 같은 2차원 인스턴스에는 영역과 길이가 있습니다. 비어 있는 인스턴스에서는 -1차원을 보고하고 GeometryCollection에서는 해당 내용의 유형에 따라 다른 영역을 보고합니다.

인스턴스의 차원을 반환하려면
STDimension

인스턴스의 길이를 반환하려면
STLength

인스턴스의 영역을 반환하려면
STArea

Empty

geometry instance 점이 없습니다. 비어 있는 LineString, CircularString, CompoundCurveMultiLineString 인스턴스의 길이는 0입니다. 비어 있는 Polygon, CurvePolygonMultiPolygon 인스턴스의 영역은 0입니다.

인스턴스가 비어 있는지 확인하려면
STIsEmpty.

단순

geometry instance 단순하려면 다음 두 요구 사항을 모두 충족해야 합니다.

  • 인스턴스의 각 도형은 엔드포인트를 제외하고 자체 교차해서는 안 됩니다.

  • 인스턴스의 도형 두 개가 양쪽의 경계가 아닌 점에서는 서로 교차하지 않아야 합니다.

참고

비어 있는 기하 도형은 항상 단순합니다.

인스턴스가 단순한지 확인하려면
STIsEmpty.

경계, 내부 및 외부

instance 내부geometry 는 instance 점유하는 공간이며 외부는 차지하지 않는 공간입니다.

경계 는 다음과 같이 OGC에 의해 정의됩니다.

  • PointMultiPoint 인스턴스에는 경계가 없습니다.

  • LineStringMultiLineString 경계는 시작점과 끝점으로 구성되며 짝수 횟수에 발생하는 시작점과 끝점은 제거됩니다.

DECLARE @g geometry;  
SET @g = geometry::Parse('MULTILINESTRING((0 1, 0 0, 1 0, 0 1), (1 1, 1 0))');  
SELECT @g.STBoundary().ToString();  

Polygon 또는 MultiPolygon 인스턴스의 경계는 해당 인스턴스 링의 집합입니다.

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

인스턴스의 경계를 반환하려면
STBoundary

봉투

경계 상자라고도 하는 instance 봉투geometry 는 instance 최소 및 최대(X,Y) 좌표로 구성된 축 맞춤 사각형입니다.

인스턴스의 봉투를 반환하려면
STEnvelope

Closure

닫힌geometry instance 시작점과 끝점이 같은 그림입니다. Polygon 인스턴스는 닫혀 있다고 간주되며, Point 인스턴스는 닫혀 있지 않습니다.

링은 단순하고 닫혀 있는 LineString 인스턴스입니다.

인스턴스가 닫혀 있는지 확인하려면
STIsClosed

인스턴스가 링인지 확인하려면
STIsRing

Polygon 인스턴스의 외부 링을 반환하려면
STExteriorRing

Polygon에 있는 내부 링의 개수를 반환하려면
STNumInteriorRing

Polygon에 지정된 내부 링을 반환하려면
STInteriorRingN

SRID(Spatial Reference ID)

SRID는 geometry 인스턴스를 나타내는 좌표계를 지정하는 식별자입니다. 다른 SRID를 사용하는 두 인스턴스는 서로 비교할 수 없습니다.

인스턴스의 SRID를 설정하거나 반환하려면
STSrid

이 속성은 수정할 수 있습니다.

geometry 인스턴스 간 관계 확인

geometry 데이터 형식은 수많은 기본 메서드를 제공합니다. 이러한 메서드를 사용하여 두 개의 geometry 인스턴스 간 관계를 확인할 수 있습니다.

두 인스턴스가 동일한 점 집합으로 구성되었는지 확인하려면
STEquals

두 인스턴스가 결합되지 않았는지 확인하려면
STDisjoint

두 인스턴스가 교차하는지 확인하려면
STIntersects

두 인스턴스가 액세스하는지 확인하려면
STTouches

두 인스턴스가 겹치는지 확인하려면
STOverlaps

두 인스턴스가 상호 교차하는지 확인하려면
STCrosses

한 인스턴스가 다른 인스턴스 내에 있는지 확인하려면
STWithin

한 인스턴스에 다른 인스턴스가 있는지 확인하려면
STContains

한 인스턴스가 다른 인스턴스를 겹치는지 확인하려면
STOverlaps

두 인스턴스가 공간적으로 관련되어 있는지 확인하려면
STRelate

두 geometry의 점 간 최단 길이를 확인하려면
STDistance

geometry 인스턴스의 기본값을 SRID 0으로 설정

SQL Server 인스턴스의 geometry 기본 SRID는 0입니다. geometry 공간 데이터를 사용하면 계산을 수행하는 데 공간 인스턴스의 특정 SRID가 필요하지 않으므로 인스턴스가 정의되지 않은 평면 공간에 존재할 수 있습니다. 데이터 형식 메서드 계산 geometry 에서 정의되지 않은 평면 공간을 나타내기 위해 SQL Server 데이터베이스 엔진은 SRID 0을 사용합니다.

예제

다음 두 예에서는 geometry 데이터를 추가하고 쿼리하는 방법을 보여 줍니다.

  • 첫 번째 예에서는 ID 열과 geometryGeomCol1이 있는 테이블을 만듭니다. 세 번째 열에서는 geometry 열을 OGC(Open Geospatial Consortium) WKT(Well-Known Text) 표현으로 렌더링하고 STAsText() 메서드를 사용합니다. 그러고 나면 두 개의 행이 삽입됩니다. 이 중 한 행에는 LineStringgeometry인스턴스가 들어 있고, 다른 행에는 Polygon 인스턴스가 들어 있습니다.

    IF OBJECT_ID ( 'dbo.SpatialTable', 'U' ) IS NOT NULL   
        DROP TABLE dbo.SpatialTable;  
    GO  
    
    CREATE TABLE SpatialTable   
        ( id int IDENTITY (1,1),  
        GeomCol1 geometry,   
        GeomCol2 AS GeomCol1.STAsText() );  
    GO  
    
    INSERT INTO SpatialTable (GeomCol1)  
    VALUES (geometry::STGeomFromText('LINESTRING (100 100, 20 180, 180 180)', 0));  
    
    INSERT INTO SpatialTable (GeomCol1)  
    VALUES (geometry::STGeomFromText('POLYGON ((0 0, 150 0, 150 150, 0 150, 0 0))', 0));  
    GO  
    
  • 두 번째 예에서는 STIntersection() 메서드를 사용하여 앞서 삽입한 두 geometry 인스턴스가 교차하는 지점을 반환합니다.

    DECLARE @geom1 geometry;  
    DECLARE @geom2 geometry;  
    DECLARE @result geometry;  
    
    SELECT @geom1 = GeomCol1 FROM SpatialTable WHERE id = 1;  
    SELECT @geom2 = GeomCol1 FROM SpatialTable WHERE id = 2;  
    SELECT @result = @geom1.STIntersection(@geom2);  
    SELECT @result.STAsText();  
    

참고 항목

공간 데이터(SQL Server)