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

적용 대상:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

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

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

SQL Server에서 지원되는 geometry 데이터 형식(평면)은 OGC(Open Geospatial Consortium) Simple Features for SQL Specification 버전 1.1.0을 따릅니다.

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

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

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

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

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

기하 도형 주위에 버퍼를 만들려면
STBuffer(geometry 데이터 형식)

BufferWithTolerance(geometry 데이터 형식)

기본 버전의 기하 도형을 만들려면
Reduce(geometry 데이터 형식)

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

두 geometry 인스턴스의 교집합에서 기하 도형을 만들려면
STIntersection(geometry 데이터 형식)

두 geometry 인스턴스의 합집합에서 기하 도형을 만들려면
STUnion(geometry 데이터 형식)

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

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

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

WKT 입력으로부터 기하 도형 인스턴스 구성

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

WKT 입력으로부터 기하 도형 인스턴스 유형을 구성하려면
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 데이터베이스 간에 기하학 데이터를 교환하도록 허용합니다. 다음 함수는 WKB 입력을 사용하여 geometry 인스턴스를 생성합니다.

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 TEXT 입력으로부터 geometry 인스턴스 구성

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

GML 입력으로부터 기하학 인스턴스 유형을 구성하려면
GeomFromGml(geometry 데이터 형식)

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

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

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

ToString(geometry 데이터 형식)

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

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

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

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

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

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

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

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

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

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

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

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차원이 될 수 있습니다. PointMultiPoint 와 같은 0차원 geometry에는 길이 또는 영역이 없습니다. LineString, CircularString, CompoundCurveMultiLineString과 같은 1차원 개체에는 길이가 있습니다. Polygon, CurvePolygonMultiPolygon과 같은 2차원 인스턴스에는 영역과 길이가 있습니다. 빈 인스턴스는 -1의 차원을 보고하고 GeometryCollection은 콘텐츠 형식에 따라 영역을 보고합니다.

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

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

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

비어 있음

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

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

단순

인스턴스의 기하 도형단순하려면 다음 요구 사항을 모두 충족해야 합니다.

  • 인스턴스의 각 그림은 끝점을 제외하고는 자체적으로 교차해서는 안 됩니다.

  • 인스턴스의 두 그림이 둘 다 경계에 있지 않은 지점에서는 서로 교차할 수 없습니다.

참고 항목

빈 기하 도형은 항상 간단합니다.

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

경계, 내부 및 외부

geometry 인스턴스의 내부 는 인스턴스가 차지하는 공간이고 외부 는 해당 인스턴스가 차지하지 않는 공간입니다.

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

  • 지점MultiPoint 인스턴스에는 경계가 없습니다.

  • 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

Envelope

geometry 인스턴스의 봉투경계 상자로도 알려져 있으며 해당 인스턴스의 최대 및 최소 (X, Y) 좌표로 구성되는 축에 맞춰진 사각형입니다.

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

Closure

닫힌geometry 인스턴스는 시작점과 끝점이 같은 그림입니다. 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 데이터를 추가하고 쿼리하는 방법을 보여 줍니다.

예 A.

이 예에서는 ID 열과 geometryGeomCol1이 있는 테이블을 만듭니다. 세 번째 열은 geometry 열을 OGC(Open Geospatial Consortium) WKT(잘 알려진 텍스트) 표현으로 렌더링하고 이 STAsText() 메서드를 사용합니다. 그런 다음 두 개의 행이 삽입됩니다. 한 행에는 geometryLineString 인스턴스가 포함되고 한 행에는 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  

예 2.

이 예제에서는 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)