空間タイプ - 地理

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceMicrosoft Fabric の SQL データベース

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

Note

Fabric SQL データベースでは、空間型の列は使用できますが、Fabric OneLake にはミラー化されません。

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

geography メソッドの許容誤差は、1.0e-7 * までです。 エクステントは、 geography オブジェクトのポイント間のおおよその最大距離を参照します。

地理タイプを登録する

geography 型は、各データベースで使用できるように事前に定義されています。 geography 型のテーブル列を作成し、システムが提供する他のデータ型を使用するときと同じように geography データを操作できます。 この型は、永続化された計算列および非永続化された計算列の両方で使用できます。

Conversion

地理から二値、varbinary、char、varchar、nchar、nvarcharへの変換は明示的でなければなりません。 CAST または CONVERT を使用します。

二進法、varbinary、char、varchar、nchar、nvarcharから地理学への変換は、暗黙的にも明示的にも可能です。

地理と他のすべてのデータ型の変換は許可されていません。 これには 地理 学と 幾何学の変換も含まれます。 これら2つのタイプ間でデータを移動するには、Well-Known バイナリ(WKB)または Well-Known テキスト(WKT)メソッド、例えばSTGeomFromWKB()STAsBinary()を用いてください。

文字列タイプから 地理 への変換も、 geography::Parse()と同じルールを用います。 文字列はテキスト Well-Known に違いない。 結果のSRIDは4326です。

地理とバイナリまたはヴァルビナリの変換は、SQL Serverネイティブの地理シリアライゼーション形式を使い、バイナリ Well-Known 使いません。 Well-Known のバイナリ値はエラーを引き起こします。 バイナリへの変換やバイナリからの変換 Well-Known、 STAsBinary() と STGeomFromWKB()を使用します。

ターゲット文字列やバイナリ型が 地理 値に対して短すぎるとエラーが生じます。 値が切り詰められることはありません。

注釈

Microsoft FabricのSQLデータベースでは、地理および地形データ型はサポートされていますが、Fabric OneLakeにミラーリングすることはできません。

例示

A. 地理データの追加およびクエリ方法を示す

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

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

DECLARE @geog1 AS geography;

DECLARE @geog2 AS geography;

DECLARE @result AS 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 型を使用して、保存される計算列を持つテーブルを作成します。

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
);