Under The Table

SQL Server 2008의 공간 데이터 지원

Bob Beauchemin

코드는 MSDN 코드 갤러리에서 다운로드할 수 있습니다.
온라인으로 코드 찾아보기

목차

Geography 데이터 형식 사용
공간 인덱스
시각화 도우미
Geometry 데이터 형식
공간 시각화
SQL Server 공간 데이터 라이브러리
요약

SQL Server 2008은 새로운 데이터 형식, 새로운 T-SQL 문 등 여러 향상된 기능과 Microsoft .NET Framework 지원, XML 지원 및 Service Broker 기능에 대한 증분 변경 내용을 제공합니다. 그중에서도 가장 두드러지고 흥미로운 변경 사항은 공간 데이터에 대한 SQL Server 2008 지원 기능입니다. SQL Server 프로그래머에게는 실로 강력한 도구가 하나 더 추가된 셈입니다. 이 칼럼에서는 공간 데이터를 간략하게 소개하고 흥미로운 사용 방법을 몇 가지 살펴보도록 하겠습니다.

공간 데이터는 2D 또는 3D 이미지로 나타내는 데이터라고 정의할 수 있습니다. SQL Server 2008은 2D 이미지를 지원하며 향후 릴리스에서 3D 지원 기능이 추가될 것으로 예상됩니다. 공간 데이터는 다시 기하 데이터(유클리드 기하학 관련 계산에 사용 가능한 데이터)와 지리 데이터(지구 상의 지리적 위치와 경계를 식별하는 데이터)로 나눌 수 있습니다.

Geography 데이터 형식 사용

먼저 고객 관리에 사용되는 대부분의 OLTP(Online Transaction Processing) 시스템에 유용한 간단한 응용 프로그램부터 살펴보겠습니다. 고객마다 주소가 있으므로 이 용도로 공간 데이터는 매우 유용합니다. 보통 주소라고 하면 국가, 시/도, 구, 동, 번지, 우편번호를 생각하겠지만, 지구 상의 한 지점에 해당하므로 위도/경도 쌍으로 나타낼 수도 있습니다. 엄밀히 따지면 주소는 지면의 한 구획에 해당하기 때문에 다각형으로 나타내는 것이 맞겠지만 여기서는 편의상 한 지점으로 간주합니다. 고객의 주소를 위도와 경도로 관리하면 다음과 같은 정보를 제공할 수 있습니다.

  • 특정 고객의 집에서 가장 가까운 은행 지점 세 곳
  • 고객과 가장 가까이에 살고 있는 영업 사원
  • 특정 도시(예: 시애틀, 워싱턴 등)의 반경 10마일 내에 거주하는 고객 수
  • 가장 가까운 지점이 2마일 이상 떨어져 있는 고객 수

주소를 위도/경도 쌍으로 변환하는 프로세스를 주소 지오코딩이라고 합니다. MapPoint, Virtual Earth, Google Earth 등 다양한 온라인 서비스에서 지오코딩을 서비스로 제공하고 있습니다. 예를 들어 미국의 주소를 한 지점으로 변환하려면 MapPoint 지오코딩 웹 서비스에 대한 호출을 SQLCLR 함수에 캡슐화하면 됩니다. 이 방법은 코드 샘플에 나와 있습니다. 하지만 위도/경도를 SQL Server 데이터베이스의 어디에 저장해야 할까요?

SQL Server 2008은 공간 데이터를 저장하는 데 필요한 geometry 및 geography라는 두 가지 데이터 형식을 기본 제공합니다. 이 두 가지 데이터 형식은 모두 사용자 정의 형식에 .NET 아키텍처를 사용하므로 속성과 메서드를 정의할 수 있습니다. geography 데이터 형식이 여기서 설명하려는 용도에 적합하므로 geography 데이터 형식을 중점적으로 살펴보겠습니다.

간단한 SQL 변수 선언(DECLARE @g geography)이나 테이블의 열로 geography 형식의 인스턴스를 정의하고 다양한 방법으로 이 데이터 형식을 초기화할 수 있습니다. 특정 지점을 나타내는 geography 형식의 경우 geography 형식의 STPointFromText 정적 메서드를 사용하는 방법이 가장 간단합니다. STPointFromText 메서드에는 Open Geospatial Consortium의 WKT(Well-Known Text) 형식(POINT(x,y))뿐만 아니라 SRID(spatial reference identifier)도 필요합니다. SRID는 둥근 지구 또는 평평한 지구 매핑에 사용되는 공간 참조 시스템을 식별합니다. 여기서는 SRID 4326에 해당하는 GPS 좌표가 MapPoint 지오코더 웹 서비스에 사용된다는 정도만 알아두면 됩니다. 이 좌표는 WGS 84(World Geodetic System 1984)를 나타냅니다. (SQL Server 2008에서 지원되는 모든 SRID는 sys.spatial_reference_systems라는 메타데이터 테이블을 쿼리하면 간단히 확인할 수 있습니다.)

따라서 주소의 geography 데이터를 초기화하는 코드는 다음과 같습니다.

DECLARE @addr nvarchar(256) = 'Some sample address, City, State, Zip';
DECLARE @addr_as_xy nvarchar(30);
DECLARE @g geography;
SET @addr_as_xy = dbo.Geocoder(@addr);
SET @g = geography::STPointFromText(@addr_as_xy, 4326);

geography는 .NET 기반 데이터 형식으로 구현되므로 코드와 관련해서 몇 가지 알아야 할 사항이 있습니다. 첫째, STPointFromText는 정적 메서드이기 때문에 datatype::method 구문을 사용하여 호출해야 합니다. 또한 .NET 기반 데이터 형식의 메서드 이름은 대/소문자가 구별되므로 STPointFromText에 대/소문자를 정확하게 사용해야 합니다.

마지막으로 기억해야 할 중요한 사항 한 가지는 위도/경도가 아니라 "xy"로 위치 값을 반환하도록 geocoder 함수를 코딩해야 한다는 점입니다. Open Geospatial Consortium은 WKB를 정의하고 있는데 WKB(Well-Known Binary)는 x,y 좌표 쌍을 사용하는 형식입니다. 따라서 STPointFromText에는 POINT(위도/경도)가 아니라 POINT(경도/위도) 값이 전달되어야 합니다. 위도/경도를 사용하려는 경우 SQL Server는 위도/경도를 사용하는 XML 언어인 GML(Geographic Markup Language)로 geography 인스턴스를 생성합니다. 또는 지점 값이 있는 경우 위도, 경도, SRID를 매개 변수로 사용하는 geometry 데이터 형식의 정적 메서드를 사용할 수 있습니다.

자, 이제 고객 정보를 지오코딩해보았으니 다음으로 지점 위치(또는 다른 지점 정보, 창고 정보 또는 위치와 관련된 기타 정보)와 영업 사원 위치도 지오코딩할 수 있을 겁니다. customer, salesperson 및 branch라는 이름의 테이블을 완성했다고 가정해봅니다. 각 테이블에는 해당 위치를 나타내는 geography 형식의 열(편의상 geog라고 함)이 있습니다.

이 정보는 앞에서 언급한 정보를 제공하는 데 사용할 수 있는데 이를 위해서는 geography 데이터 형식에 대한 메서드를 사용해야 합니다. 두 geography 개체 간의 거리를 계산하는 메서드는 당연히 STDistance입니다. 세 번째 정보(특정 도시의 10마일 반경 내에 거주하는 고객 수)를 제공하는 데는 STBuffer 메서드와 STIntersects 메서드를 사용할 수 있습니다. SQL Server에는 보다 대략적인 버퍼를 계산(정확한 버퍼를 계산하는 경우보다 속도가 빠름)하는 데 사용되는 BufferWithTolerance라는 메서드도 있습니다.

첫 번째 정보는 다음과 같은 쿼리를 사용하여 제공할 수 있습니다.

SELECT TOP(3) b.name,
 c.geog.STDistance(b.geog)/1000 [Distance in km]
FROM customer c, branch b
WHERE c.customerid = '12345' -- this query looks at customer 12345
ORDER BY c.geog.STDistance(b.geog)

가장 가까이에 있는 영업 사원을 계산하는 쿼리도 거의 비슷한 방법으로 실행할 수 있습니다.

시애틀의 반경 10마일 내에 거주하는 고객의 경우에는 어떻게 계산할까요? 이 쿼리의 경우 시애틀의 시경계(도시 경계의 다각형 또는 시애틀 시내로 지정한 지점으로 나타냄) 주위에 버퍼를 두고 해당 버퍼와 교차하는 지점(고객)을 모두 선택하면 됩니다. 코드에서는 다음과 같이 표현됩니다.

-- or declare POINT for "downtown Seattle"
-- 1609.344 meters per mile
DECLARE @Seattle geography = 'POLYGON(....)'; SELECT c.customerid FROM
 customer c WHERE c.geog.STIntersects(@Seattle.STBuffer(10 * 1609.344));

이러한 예는 geography 형식의 인스턴스와 상호 작용하는 방법과 관련하여 보다 흥미로운 사항들을 보여 줍니다. 예를 들어 geography 데이터 형식의 인스턴스 메서드인 STBuffer를 사용하는 경우 STPointFromText 같은 정적 메서드에 사용하는 type::method 구문 대신 instance.method 구문을 사용해야 합니다. 또한 두 geography 간의 거리를 계산하거나 특정 geography 인스턴스가 다른 인스턴스와 교차하는 지를 확인하는 것이므로 Instance1.method(Instance2) 구문을 사용합니다.

가장 가까운 은행 지점에서 2마일 이상 떨어진 곳에 거주하는 고객 수를 확인하려면 모든 은행 지점의 geography를 각각 2마일의 버퍼를 두고 집계한 다음 이렇게 집계된 geography 컬렉션에 교차하지 않는 고객을 찾으면 됩니다. geography 데이터 형식에는 STUnion이라는 메서드는 없지만 geography 인스턴스의 메서드로 지정하여 해당 인스턴스와 다른 인스턴스의 합집합을 반환하도록 할 수 있습니다.

그러나 이는 필자가 사용하려는 집합 기반 집계가 아닙니다. 다행히 SQL Server 2005부터 .NET 코드로 작성할 수 있는 사용자 정의 집계가 도입되었고 여기서도 여러 값의 합집합을 구하는 데 사용할 수 있습니다. 사용자 정의 집계 방법에 대한 자세한 설명은 접어두기로 하고, 사용자 집계를 위해서는 Init(answer 초기화), Terminate(answer반환), Accumulate(각 행에 대해 호출), Merge(여러 스레드의 처리 결과를 병합할 때 호출)라는 네 가지 초기화가 필요합니다.

집계에서 Accumulate 메서드는 호출될 때마다 현재 행 geography를 answer geography와 통합할 수 있습니다. 사실 이 집계는 CodePlex의 SQL Server Spatial Tools 프로젝트에 포함되어 있기 때문에 직접 작성할 필요가 없습니다. 게다가 이 집계는 각 행의 버퍼도 전달할 수 있도록 하여 2마일이라는 버퍼 문제도 해결해 줍니다. 따라서 다음과 같이 쿼리를 작성할 수 있습니다.

SELECT COUNT(*)
FROM customer c
WHERE
c.geog.STIntersects(
SELECT dbo.GeographyUnionAggregate(b.geog,2*1609.344) FROM branch b)=0

이러한 예에서 알 수 있듯이 주소를 지오코딩하고 우편 주소 형식으로 저장하면 응용 프로그램에 비즈니스적 가치를 더할 수 있습니다.

공간 인덱스

비즈니스 규모가 커지면 모든 고객과 모든 영업 사원의 거리 또는 모든 고객과 모든 은행 지점의 거리를 계산하는 데 시간이 너무 많이 걸릴 수 있습니다. SQL Server 2008 공간 데이터 지원 기능에는 공간 인덱스가 포함되어 있는데, 공간 인덱스는 SQL Server에서 관계형 인덱스가 쿼리 실행 속도를 높이는 것처럼 공간 쿼리 실행 속도를 높이도록 만들어진 일반적인 B-트리 인덱스입니다.

2차원 공간 데이터를 1차원 B-트리에 매핑할 때는 공간 분할(tessellation) 기법이 사용됩니다. 즉, 영역을 작은 하위 영역으로 나누고 각 공간 인스턴스와 교차하는 하위 영역을 기록합니다. geography 데이터 형식의 경우 이 기법을 이용하면 지구 전체를 반구로 나누고 각 반구를 평면에 투사하게 됩니다. 그러면 각 geography 인스턴스가 이 평면에서 하나 이상의 하위 구획(타일)을 나타내게 되고 공간 인덱스에는 인스턴스가 나타내는 각 타일당 하나씩의 행이 포함됩니다. geometry 형식의 경우 고유한 사각 좌표 체계를 지정하게 되므로 공간 인덱스가 나타내는 지역의 경계(경계 상자)를 지정할 수 있습니다.

타일과 교차하는 공간 인스턴스를 공간 인덱스의 행에 매핑하는 방법은 여러 가지 규칙에 따라 결정되며, 공간 인덱스의 그리드 시스템을 얼마나 세분화할지를 여러 수준에서 정의할 수 있습니다. 공간 인덱스에 대한 자세한 내용은 SQL Server 온라인 설명서에 잘 나와 있습니다.

예제 고객 시스템으로 돌아와서, 다음 DDL(데이터 정의 언어)를 사용하면 customer 테이블의 geog 열에 공간 인덱스를 정의할 수 있습니다.

CREATE SPATIAL INDEX cust_geog_idx
ON dbo.customer(geog)
GRIDS =(LEVEL1=HIGH,LEVEL2=HIGH,LEVEL3=HIGH,LEVEL4=HIGH));

이 인덱스를 매우 세분화된 그리드로 정의하면 각 주소가 한 지점, 즉 하나의 타일로 나타나기 때문에 선이나 다각형으로 나타나 여러 타일과 교차하는 것보다 처리하기가 용이합니다.

공간 인덱스는 특정 공간 메서드에만 사용됩니다. 현재 공간 인덱스가 사용되는 geography 조건자는 다음과 같습니다.

instance1.STIntersects(instance2) = 1
instance1.STEquals(instance2) = 1
instance1.STDistance(instance2) < number
instance1.STDistance(instance2) <= number

geography가 아니라 geometry 데이터 형식을 처리하는 경우에도 STContains, STOverlaps, STTouches 및 STWithin 메서드에 공간 인덱스를 사용할 수 있지만 1(True)를 검사할 때만 사용 가능합니다. 공간 인덱스의 작동 방식에서 보면 "가장 가까운 은행 지점에서 2마일 이상 떨어진 곳에 거주하는 고객"이라는 쿼리는 사실상 STIntersects가 True를 반환하는 고객 수를 카운트하여 전체 고객 수에서 빼는 것입니다.

시각화 도우미

지금까지 살펴본 몇 가지 예에서 공간 데이터를 행과 열 이외의 다른 형식으로 표시할 수 있다면 무척 유용할 것입니다. 사실 공간 데이터 형식 자체를 선택하면 이진 표현이 반환된다는 사실을 이미 눈치챈 독자도 있을 겁니다. ToString 메서드나 STAsText 메서드를 사용하면 WKB 형식이 반환됩니다. WKB 형식이 조금 더 낫긴 하지만 머리 속에서 지도 위에 경도/위도 쌍을 투영하는 능력이 없는 한 지리적 위치를 파악하는 데는 도움이 되지 않습니다. 대부분의 경우 공간 데이터를 활용하려면 그래픽 시각화 도우가 필요합니다. 그리고 지리 데이터의 경우에는 대개 이러한 시각화 도우미에 지도가 포함됩니다.

SQL Server Management Studio 2008에는 쿼리 결과 창의 공간 결과 탭 형태로 간단한 시각화 도우미가 포함되어 있습니다. 이 시각화 도우미는 쿼리 결과의 geography 또는 geometry 열을 사용하여 눈금 위에 공간 데이터 형식을 그립니다. 쿼리 결과에 공간 열이 여러 개 있으면 시각화할 열을 선택할 수 있습니다. 표시할 열은 SQL Server 이진 형식이어야 합니다. ToString() 또는 STAsText()를 사용하면 시각화 도우미에서 처리되지 않습니다.

geography 데이터 형식의 경우 메르카토르 투영법이나 등방형 투영법 같은 지도 투영 방식도 선택할 수 있지만 기본적으로 데이터는 지도 위에 투영되지 않습니다. 지도 윤곽 데이터가 포함된 테이블이 있는 경우 데이터를 지도에 오버레이하려면 해당 테이블의 행 집합과 지도 geography가 들어 있는 행 집합 간에 UNION ALL을 실행하는 방법이 가장 간단합니다. 그림 1은 SQL Server Management Studio 시각화 도우미에서 Mondial 데이터베이스에 저장된 700개 이상의 도시를 나타내는 점을 보여 줍니다. 이를 생성하는 데 사용된 SQL Server 쿼리는 다음과 같습니다.

SELECT geog, name 
FROM Mondial.dbo.city
WHERE geog IS NOT NULL

그림 1 Mondial 데이터베이스 City 테이블에서 가져온 점의 행 집합

그림 2처럼 지도 오버레이를 기본적으로 제공하는 상용 또는 셰어웨어 시각화 도우미를 사용하면 더 효과적입니다. SQL Server Management Studio의 공간 결과 탭에서는 700개가 넘는 점의 행 집합을 지도 오버레이로 표시할 수 있습니다. 이러한 결과를 생성하는 SQL Server 쿼리는 다음과 같습니다.

SELECT geog, name 
FROM Mondial.dbo.city
WHERE geog IS NOT NULL
UNION ALL
SELECT geog, cntry_name 
FROM SpatialSamples.dbo.cntry00

그림 2 지도 오버레이로 표시되는 점의 행 집합

대표적인 시각화 도우미로 Craig Dunn의 Geoquery 2008 프로그램이 있습니다. Geoquery 2008은 무료 시각화 도우미로, 지도 투영이 포함된 SQL Server 2008 쿼리 결과를 생성할 뿐만 아니라 공간 데이터 개체의 색과 선 두께까지 선택할 수 있습니다. 또한 Microsoft Virtual Earth나 Google Earth에 데이터를 표시하는 코드를 직접 작성할 수도 있지만 이 칼럼에서는 다루지 않습니다.

Geometry 데이터 형식

다음으로, 앞서 간단하게만 언급했던 다른 공간 데이터 형식인 geometry 데이터 형식에 대해 자세히 알아보고 어떤 경우에 geography 대신 geometry를 사용해야 하는지 설명하도록 하겠습니다. geography 데이터 형식은 지구 중심과 지표면 상의 각도인 위도와 경도(타원형 좌표)로 평면을 나타내는 데 반해 geometry 데이터 형식은 x, y 좌표로 평면을 나타냅니다. geometry 데이터 형식은 사무실의 3차원 배치도나 창고와 같이 지구의 모양을 고려하지 않아도 되고 비교적 규모가 작은 평면을 나타내는 데 사용할 수 있습니다. 3차원 공간에서 동료 직원의 사각형 사무실을 찾을 때는 지구의 만곡도가 문제가 되지 않으므로 geometry 데이터 형식과 선형 계산만 사용해도 충분합니다. geometry 데이터를 처리할 때는 측정 단위와 원점(예: 창고의 왼쪽 바닥 모서리를 0,0으로 설정)을 설정합니다.

지구 상의 공간적 위치를 처리하는 데 geometry 데이터를 사용할 수도 있지만 프로세스가 좀 더 복잡해집니다. 지구를 좌표계에 매핑하는 방법은 다양하고 STArea와 STDistance 같은 계산 메서드에 영향을 주기 때문에 공간 데이터 인스턴스에 SRID를 지정해야 합니다.

geometry 데이터를 사용하든, geography 데이터를 사용하든 SRID는 필요합니다. geometry 데이터 형식의 경우 사무실 배치도를 매핑할 때와 같이 직접 좌표계와 측정 단위를 설정한다면 알 수 없거나 지엽적인 공간 참조 시스템을 나타내는 SRID 0을 선택합니다. SRID 0은 SQL Server에서 geometry 데이터 형식에 기본값으로 지정됩니다. geography의 경우 SQL Server에서 사용 가능한 SRID 중 하나를 선택해야 합니다. 기본값인 SRID 4326은 GPS 시스템에 사용되는 SRID입니다.

SQL Server의 기본 제공 geography 메서드에는 sys.spatial_reference_systems라는 시스템 메타데이터 테이블에 나열된 390개 공간 참조 시스템을 모두 사용할 수 있습니다. 이러한 공간 참조 시스템은 EPSG(European Petroleum Survey Group) 측지 매개 변수 레지스트리에서 제공됩니다. EPSG는 폐지되고 모든 업무가 OGP(Oil and Gas Producers) Surveying and Positioning Committee에 통합되었습니다. 석유 및 천연가스 생산자들이 시추 탐사 시에 정확한 위치 추적 기능을 원하리라는 사실은 자명합니다.

각 SRID에는 측정 단위(대개 미터법 사용)뿐만 아니라 기준점(지구 상의 참조 지점 집합), geoid, 좌표계 및 지도 투영을 지정하는 문자열도 포함되어 있습니다. 좌표계에 대한 자세한 내용은 Isaac Kunen의 백서 "공간 좌표계 소개: 둥근 지구를 나타내는 평면 지도"를 참조하시기 바랍니다.

SQL Server geography 데이터 형식의 계산 방법은 사용되는 SRID에 따라 달라지기 때문에 SRID가 일치하지 않는 공간 형식 인스턴스 간에 공간 메서드(예: Distance 및 Intersects)를 사용하려 하면 NULL 값이 반환됩니다. SRID를 변환하는 방법은 뒷부분에서 자세히 설명하도록 하겠습니다.

공간 시각화

지금까지 공간 데이터의 가장 대표적인 이용 사례를 몇 가지 살펴보면서 데이터를 시각적인 형태로 제공하기 위해 시각화 도우미가 많이 사용된다는 사실을 알았을 겁니다. 그런데 세계 지도나 미국 지도를 사용하는 대신 데이터를 국경에 투영하거나 국회의 정당 분포도 또는 인구 조사 데이터와 연관시키려면 어떻게 해야 할까요? 이 경우 필자가 "공간 참조 데이터"라고 부르는 데이터가 필요합니다. 공간 참조 데이터는 공용 웹 사이트에서 다운로드하거나 ESRI(Environmental Systems Research Institute) 같은 업체에서 구입할 수 있습니다. 공용 공간 참조 데이터의 무료 제공 여부는 지역적 관행에 크게 좌우됩니다. 미국에서는 필자가 언급한 국경이나 인구 조사 데이터 등이 다른 여러 나라에 비해 자유롭게 제공됩니다.

자, 그러면 미국 인구 조사국의 Tiger 웹 사이트와 같은 공용 웹 사이트에서 지리 참조 파일을 다운로드했다고 가정합니다. 그런데 파일이 SQL Server의 테이블에 있는 geography 열이 아니라 ESRI Shapefile 형식입니다.

이 파일을 SQL Server로 가져오려면 어떻게 해야 할까요? 또한 공용으로 제공되는 파일은 지오코더에서 생성되는 SRID 4326이 아니라 SRID 4269를 사용하는 경우가 많습니다. 그렇다면 공간 메서드에서 NULL이 반환되지 않도록 서로 다른 SRID 간에 변환하려면 어떻게 해야 할까요? 여기서 우리가 해결해야 할 문제는 단순한 변환 문제라기 보다 ETL(추출-변환-로드) 문제에 가깝습니다. 인구 조사 추적 번호나 인구 수치와 같은 비공간 데이터를 가져와야 합니다. 그리고 이론적으로는 SRID 간에 데이터를 즉석에서 변환할 수 있지만 그렇게 하면 쿼리 실행 속도가 크게 저하됩니다. 따라서 명백한 ETL 문제라고 할 수 있습니다.

SQL Server 2008에는 이 문제를 해결하는 데 도움이 되는 기능이 전혀 없습니다. Morten Nielsen의 Shape2SQL 도구 같이 Shapefile을 SQL Server 테이블로 로드하는 프로그램이 있지만 타사 공간 파일 형식은 Shapefile 외에도 여러 가지가 있으며 SRID 간의 변환이나 다른 특수한 변환을 수행해야 할 수도 있습니다. 공간 데이터 변환과 대량 로드에 전문화된 타사 상용 제품이 많습니다. 대표적으로 SAFE Software의 FME for SQL Server, Manifold의 Spatial Extender for SQL Server, ESRI의 GIS(지리 정보 시스템) 제품군 등이 있습니다. 이러한 제품을 사용하면 SQL Server로 데이터를 가져오거나 SQL Server에서 완전한 GIS로 데이터를 내보낼 수 있습니다. 필자는 변환 라이브러리가 포함되어 있고 대부분의 공간 데이터 형식을 지원하며 SQL Server Integration Services라는 SQL Server ETL 시스템용 구성 요소까지 제공하는 SAFE Software의 FME for SQL Server를 사용하여 효과적으로 문제를 해결했습니다.

SQL Server 공간 데이터 라이브러리

SQL Server에서 데이터를 내보내거나 가져오는 데 사용할 형식은 조직의 구체적인 요구 사항과 응용 프로그램 요구 사항에 따라 결정됩니다. SQL Server 데이터 형식은 WKB 및 WKT 형식과 GML(Geographic Markup Language) 형식을 기본적으로 지원합니다. SQL Server는 geometry 및 geography 형식과 관련 메서드를 Microsoft.SqlServer.Types.dll이라는 .NET 기반 라이브러리를 통해 제공합니다. 이 라이브러리는 SQL Server와 함께 제공될 뿐만 아니라 .NET을 기반으로 하기 때문에 필요에 따라 SQL Server 2008 기능 팩의 일부로 다운로드하여 계산 및 변형 작업을 중간 계층 또는 클라이언트에서 수행할 수 있습니다. 단, 공간 데이터 쿼리를 최적화하는 공간 인덱스는 서버 쪽에서만 제공됩니다.

SQL Server는 실질적으로 SqlGeometry 및 SqlGeography라는 .NET 클래스 인스턴스를 저장하는 것이고 클래스와 메서드는 라이브러리에 들어 있습니다. SQL Server 쿼리에 공간 메서드를 사용하거나 작업을 T-SQL 또는 SQLCLR 저장 프로시저, 사용자 정의 함수 및 트리거에 캡슐화할 수 있습니다. 또한 앞서 필자가 사용했던 GeographyUnionAggregate와 같이 SqlGeometry와 SqlGeography를 .NET 사용자 정의 형식 및 사용자 정의 집계에 멤버로 사용하여 기본 기능을 확장할 수도 있습니다.

공간 데이터 라이브러리에는 로딩 최적화와 사용자 지정 변환 및 집계에 사용할 수 있는 작성기 API도 포함되어 있습니다. 이 API는 공간 데이터 인스턴스 생성 프로세스를 최적화하는 데 사용 가능한 SqlGeometryBuilder 및 SqlGeographyBuilder와 싱크 인터페이스(IGeometrySink 및 IGeographySink)로 구성됩니다. 싱크 인터페이스 중 하나를 구현하면 그림을 시작하거나 끝내고 선을 추가하고 적절한 SRID를 설정할 수 있습니다. 데이터가 준비되면 Populate 메서드를 호출하여 설정한 인스턴스를 만들면 됩니다.

요약

이 칼럼에서 언급한 요소들은 공간 데이터 형식과 업계 표준 공간 라이브러리가 도입되면서 SQL Server에 추가된 기능 중 일부에 지나지 않습니다. 지오코딩 또는 공용 참조 데이터를 통해 수집되거나 창고, 사무실 등에 대한 고유 데이터는 SQL Server에 저장하여 다른 비즈니스 데이터와 마찬가지로 관리 도구를 사용하여 관리하고 인덱싱하고 쿼리하고 분석할 수 있습니다. 이러한 기능은 여러분의 비즈니스 수준을 한 차원 끌어올릴 것입니다.

우선, GPS 시스템을 사용하여 캡처되는 모든 종류의 데이터를 가져와 나머지 데이터베이스 데이터와 함께 사용할 수 있다는 점을 기억하십시오. GPS 기능이 전화, 카메라, 자동차, 기타 장치와 장비에 점점 더 보편화되고 주소 데이터가 포함된 정보 시스템이 늘어나면서 GPS 데이터를 사용자가 필요로 하는 기능에 활용할 기회가 무궁무진하게 많아졌습니다. 앞으로 어떤 흥미로운 기술이 더 개발될지 관심을 가져보시기 바랍니다.

Bob Beauchemin은 데이터베이스 중심 응용 프로그램 전문가이자 설계자로, 교육 과정 저자이자 강사로, 집필가이자 SQLskills의 Developer Skills Partner로 활동하고 있습니다. SQL Server, 데이터 액세스 및 통합 기술, 데이터베이스 보안 등에 대한 서적과 기사를 집필한 바 있습니다. 문의 사항이 있으면 bobb@sqlskills.com으로 연락하십시오.