空間型 - geometry (Transact-SQL)

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

平面空間データ型の geometry は、SQL Server では共通言語ランタイム (CLR) のデータ型として実装されています。 この型は、ユークリッド (平面) 座標系のデータを表します。

SQL Server は、geometry 空間データ型の一連のメソッドをサポートしています。 このようなメソッドには、Open Geospatial Consortium (OGC) 標準で定義されている geometry に関するメソッド、およびこの標準に基づいた Microsoft の一連の拡張メソッドがあります。

geometry メソッドの許容誤差は、1.0e-7 * までです。 エクステントは、geometry オブジェクトの地点間の最大近似距離です。

geometry 型の登録

geometry 型は、各データベースで使用できるように事前に定義されています。 geometry 型のテーブル列を作成し、他の CLR 型を使用するときと同じように geometry データを操作できます。 保存される計算列と保存されない計算列で使用できます。

A. geometry 型のデータの追加方法とクエリ方法を示す

次の 2 つの例は、geometry 型のデータの追加方法とクエリ方法を示しています。 最初の例では、ID 列と geometry 型の GeomCol1列を含むテーブルを作成します。 3 番目の列で、 geometry 型の列をその Open Geospatial Consortium (OGC) の Well-Known Text (WKT) 表現で示し、 STAsText() メソッドを使用します。 次に 2 つの行が挿入されます。1 つは、 LineStringgeometryインスタンスを含む行で、もう 1 つは 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  

B. 2 つの geometry インスタンスが交差する地点を返す

2 番目の例では、 STIntersection() メソッドを使用して、前の例で挿入した 2 つの 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();  

C. 計算列で geometry 型を使用する

次の例では、geometry 型を使用して、保存される計算列を持つテーブルを作成します。

IF OBJECT_ID ( 'dbo.SpatialTable', 'U' ) IS NOT NULL   
    DROP TABLE dbo.SpatialTable;  
GO  
  
CREATE TABLE SpatialTable  
(  
    locationId int IDENTITY(1,1),  
    location geometry,  
    deliveryArea as location.STBuffer(10) persisted  
)  

参照

空間データ (SQL Server)