空間型 - geography

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

地理空間データ型の geography は、SQL Server では .NET 共通言語ランタイム (CLR) のデータ型として実装されています。 この型は、球体地球座標系のデータを表します。 SQL Server geography データ型は、GPS の緯度経度座標などの楕円体 (球体地球) データを格納します。

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

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

geography 型の登録

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

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

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

IF OBJECT_ID ( 'dbo.SpatialTable', 'U' ) IS NOT NULL   
    DROP TABLE dbo.SpatialTable;  
GO  
  
CREATE TABLE SpatialTable   
    ( id int IDENTITY (1,1),  
    GeogCol1 geography,   
    GeogCol2 AS GeogCol1.STAsText() );  
GO  
  
INSERT INTO SpatialTable (GeogCol1)  
VALUES (geography::STGeomFromText('LINESTRING(-122.360 47.656, -122.343 47.656 )', 4326));  
  
INSERT INTO SpatialTable (GeogCol1)  
VALUES (geography::STGeomFromText('POLYGON((-122.358 47.653 , -122.348 47.649, -122.348 47.658, -122.358 47.658, -122.358 47.653))', 4326));  
GO  

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

次の例では、STIntersection() メソッドを使用して、前の例で挿入した 2 つの geography インスタンスが交差する点を返します。

DECLARE @geog1 geography;  
DECLARE @geog2 geography;  
DECLARE @result geography;  
  
SELECT @geog1 = GeogCol1 FROM SpatialTable WHERE id = 1;  
SELECT @geog2 = GeogCol1 FROM SpatialTable WHERE id = 2;  
SELECT @result = @geog1.STIntersection(@geog2);  
SELECT @result.STAsText();  

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

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

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

参照

空間データ (SQL Server)