다음을 통해 공유


기하 도형 인스턴스 만들기, 생성 및 쿼리

평면 공간 데이터 형식 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 인스턴스를 만드는 데 사용할 수 있는 다양한 기본 제공 메서드를 제공합니다.

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

버퍼위드톨러런스(geometry 데이터 형식)

간소화된 기하 도형 버전을 만들려면
Reduce(geometry 데이터 형식)

기하학적 도형의 볼록 껍질을 만들려면
STConvexHull(geometry 데이터 형식)

두 기하 도형의 교차점에서 기하 도형을 만들려면
STIntersection(geometry 데이터 형식)

두 기하 도형의 합합에서 기하 도형을 만들려면
STUnion(지오메트리 데이터 형식)

한 기하 도형이 다른 기하 도형과 겹치지 않는 지점에서 기하 도형을 만들려면
STDifference(geometry 데이터 형식)

두 기하 도형이 겹치지 않는 지점에서 기하 도형을 만들려면
STSymDifference(geometry 데이터 형식)

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

Well-Known 텍스트 입력에서 기하 도형 인스턴스 생성

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

WKT 입력에서 모든 형식의 기하 도형 인스턴스를 생성하려면
STGeomFromText(지오메트리 데이터 형식)

구문 분석 (기하 데이터 형식)

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

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

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

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

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

WKT 입력에서 멀티폴리곤 기하 인스턴스를 생성하려면
STMPolyFromText(geometry 데이터 형식)

WKT 입력에서 지오메트리 컬렉션 인스턴스를 생성하려면
STGeomCollFromText(기하 데이터 형식)

Well-Known 이진 입력에서 기하 도형 인스턴스 생성

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

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

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

WKB 입력에서 지오메트리 MultiPoint 인스턴스를 생성하려면
STMPointFromWKB(geometry 데이터 형식)

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

WKB 입력에서 지오메트리 MultiLineString 인스턴스를 생성하려면
STMLineFromWKB(geometry 데이터 형식)

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

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

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

GML 텍스트 입력에서 기하 도형 인스턴스 생성

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

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

geometry 인스턴스에서 텍스트 Well-Known 및 이진 데이터 Well-Known 반환

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

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

ToString(geometry 데이터 형식)

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

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

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

기하학 인스턴스의 속성과 동작 조회

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

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

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

기하 도형의 인스턴스 형식을 반환하려면
STGeometryType(지리 데이터 유형)

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

기하 도형 인스턴스가 해당 인스턴스 형식에 대해 올바른 형식인지 확인하려면
STIsValid(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 좌표를 반환하려면
우리

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

차원

비정형 geometry 인스턴스는 0차원, 1차원 또는 2차원일 수 있습니다. 0차원(geometries)은 PointMultiPoint과 같은 경우, 길이나 영역이 없습니다. 1차원 개체(예: LineString, CircularString, CompoundCurve) 및 MultiLineString길이가 있습니다. 2차원 인스턴스(예: Polygon, CurvePolygonMultiPolygon)에는 영역 및 길이가 있습니다. 빈 인스턴스는 차원을 -1로 보고하고, GeometryCollection는 콘텐츠의 유형에 따라 영역을 보고합니다.

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

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

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

비어 있는

geometry 인스턴스에는 점이 없습니다. 빈 LineString, CircularString, CompoundCurve, MultiLineString 인스턴스의 길이는 0입니다. 빈 PolygonCurvePolygon영역, MultiPolygon 인스턴스는 0입니다.

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

단순

인스턴스를 geometry간단하게 만들려면 다음 두 요구 사항을 모두 충족해야 합니다.

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

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

비고

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

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

경계, 내부 및 외부

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

경계 는 다음과 같이 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

봉투

경계 상자라고도 하는 인스턴스의 봉투는 인스턴스의 geometry 최소 및 최대(X,Y) 좌표에 의해 형성된 축 맞춤 사각형입니다.

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

종료

닫힌geometry 인스턴스는 시작점과 끝점이 같은 그림입니다. Polygon 인스턴스는 닫힌 것으로 간주됩니다. Point 인스턴스가 닫혀 있지 않습니다.

링은 단순하고 닫힌 LineString 인스턴스입니다.

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

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

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

다각형의 내부 링 수를 반환하려면
STNumInteriorRing

다각형의 지정된 내부 링을 반환하려면
STInteriorRingN

SRID(공간 참조 ID)

SRID(공간 참조 ID)는 인스턴스가 표시되는 좌표계 geometry 를 지정하는 식별자입니다. SRID가 다른 두 인스턴스는 비교할 수 없습니다.

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

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

기하 도형 인스턴스 간의 관계 결정

데이터 형식은 geometrygeometry 인스턴스 간의 관계를 확인하는 데 사용할 수 있는 많은 기본 제공 메서드를 제공합니다.

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

두 인스턴스가 서로 연결되지 않는지 확인하려면
STDisjoint

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

두 인스턴스가 터치되는지 확인하려면
STTouches

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

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

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

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

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

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

두 기하 도형의 점 간 최단 거리를 확인하려면
STDistance

geometry 인스턴스 기본값: 0 SRID

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

예시

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

  • 첫 번째 예제에서는 ID 열과 열GeomCol1이 있는 geometry 테이블을 만듭니다. 세 번째 열은 geometry 열을 OGC(Open Geospatial Consortium) Well-Known Text(WKT) 표현으로 렌더링하고 이 메서드를 STAsText() 사용합니다. 그런 다음 두 개의 행이 삽입됩니다. 한 행에는 geometry의 인스턴스인 LineString가 포함되고, 다른 한 행에는 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)