Spatial データ型(geometry、geography)による地図データのサポート

SQL Server 2008 からは、Spatial データ型(geometry、geography)がサポートされました。これは、GIS(地理情報システム)における地図データ(緯度と経度)を格納できるデータ型で、次のような Bing マップ(旧 Virtual Earth)と連携した地図アプリケーションが作成できる機能です。


■ geometry データ型の利用方法
geometry データ型は、次のように利用することができます。

-- データベースの作成
CREATE DATABASE GeoTestDB
go

-- テーブルの作成。geom 列を geometry データ型へ設定
USE GeoTestDB
CREATE TABLE geomTest
(  a int IDENTITY(1,1) PRIMARY KEY
  ,geom geometry )

-- データの格納は STGeomFromText。POINT と指定することで「点」を追加
INSERT INTO geomTest
	VALUES ( geometry::STGeomFromText('POINT(3 4)', 0) )

-- POLYGON と指定することで「多角形」データを追加
INSERT INTO geomTest VALUES 
  ( geometry::STGeomFromText('POLYGON((0 0, 2 0, 2 2, 0 2, 0 0))', 0) )

-- データの確認は STAsText
SELECT geom.STAsText(), * FROM geomTest



■ STDistance(2点間の距離)
次に、STDistance 関数を利用して、2点間(0 0)と(3 4)の距離を取得してみます。

DECLARE @g1 geometry;
DECLARE @g2 geometry;
SET @g1 = geometry::STGeomFromText('POINT(0 0)', 0);
SET @g2 = geometry::STGeomFromText('POINT(3 4)', 0);
SELECT @g1.STDistance(@g2);

結果は、5 が返りますが、次のような三角形を思い浮かべると、イメージが沸くと思います。


■ STArea(多角形の面積)
次に、STArea 関数を利用して、面積を取得してみます。

-- STArea(面積)
DECLARE @g geometry;
SET @g = 
 geometry::STGeomFromText('POLYGON((0 0, 0 2, 2 2, 2 0, 0 0))', 0);
SELECT @g.STArea()



■ STIntersection(重なり部分の取得)
次に、STIntersection 関数を利用して、2つの多角形の重なり部分を取得してみます。

DECLARE @g1 geometry;
DECLARE @g2 geometry;
SET @g1 = 
 geometry::STGeomFromText('POLYGON((0 0, 0 2, 2 2, 2 0, 0 0))', 0);
SET @g2 = 
 geometry::STGeomFromText('POLYGON((1 1, 3 1, 3 3, 1 3, 1 1))', 0);
SELECT @g1.STIntersection(@g2).ToString();



なお、そのほかの SQL Server 2008 の新機能の具体的な利用方法については、弊社執筆の SQL Server 2008 自習書シリーズ(下記 URL)の「SQL Server 2008 の注目の新機能をイチ早く試してみよう! 」編を参考にしてみてください。
http://www.microsoft.com/japan/sqlserver/2008/self-learning/default.mspx