次の方法で共有


geography インスタンスの作成、構築、およびクエリ

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

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

このトピックの内容

  • 新しい geography インスタンスの作成または構築

    • 既存のインスタンスからの新しい geography インスタンスの作成

    • Well-Known Text 入力からの geography インスタンスの構築

    • Well-Known Binary 入力からの geography インスタンスの構築

    • GML Text 入力からの geography インスタンスの構築

  • geography インスタンスからの Well-Known Text および Well-Known Binary の取得

  • geography インスタンスのプロパティと動作のクエリ

    • 有効性、インスタンスの型、および GeometryCollection 情報

    • 点の数

    • ディメンション

    • 閉鎖性

    • SRID (spatial reference ID)

  • geography インスタンスの関係の特定

  • geography インスタンスでは必ずサポート対象の SRID を使用

  • 使用例

[先頭に戻る]

新しい geography インスタンスの作成または構築

既存のインスタンスからの新しい geography インスタンスの作成

geography データ型には、既存のインスタンスに基づいて新しい geography インスタンスを作成するために使用できる組み込みメソッドが数多く用意されています。

Well-Known Text 入力からの geography インスタンスの構築

geography データ型には、Open Geospatial Consortium (OGC) WKT 表現から geography を生成する組み込みのメソッドが数多く用意されています。 WKT 標準は geography データをテキスト形式で交換できるテキスト文字列です。

Well-Known Binary 入力からの geography インスタンスの構築

WKB は、Geography データをアプリケーションと SQL データベース間で交換することができる、OGC で指定されたバイナリ形式です。 次の関数は、WKB 入力を受け入れて geography インスタンスを構築します。

GML Text 入力からの geography インスタンスの構築

geography データ型には、GML (geography インスタンスの XML 表現) から geography インスタンスを生成するメソッドが用意されています。 SQL Server では、GML のサブセットをサポートします。

Geography Markup Language の詳細については、OGC の仕様の「OGC の仕様、Geography Markup Language」を参照してください。

geography インスタンスからの Well-Known Text および Well-Known Binary の取得

次のメソッドを使用して、geography インスタンスの WKT 形式または WKB 形式を取得できます。

geography インスタンスのプロパティと動作のクエリ

すべての geography インスタンスには、SQL Server のメソッドを使用して取得できるいくつかのプロパティがあります。 以下のトピックでは、geography 型のプロパティおよび動作と、geography 型に対するクエリを実行するためのメソッドについて説明します。

有効性、インスタンスの型、および GeometryCollection 情報

geography インスタンスを構築したら、次のメソッドを使用して、インスタンスの型を取得することができます。また、GeometryCollection インスタンスの場合は、特定の geography インスタンスを取得できます。

点の数

空でないすべての geography インスタンスは点で構成されています。 これらの点は、geography インスタンスが描画される地球の緯度経度座標を表します。 geography データ型には、インスタンスの点に対するクエリを実行するための組み込みメソッドが数多く用意されています。

次元

空でない geography インスタンスの次元は、0 次元、1 次元、または 2 次元のいずれかになります。 0 次元の geography インスタンス (Point や MultiPoint など) には長さや面積はありません。 1 次元のオブジェクト (LineString CircularString、CompoundCurve、MultiLineString など) には長さがあります。 2 次元のインスタンス (Polygon CurvePolygon、MultiPolygon など) には面積と長さがあります。 空のインスタンスの次元は -1 としてレポートされます。GeometryCollection ではその内容の最も大きな次元がレポートされます。

空の geography インスタンスには点はありません。 空の LineString CircularString、CompoundCurve、および MultiLineString インスタンスの長さは 0 です。 空の Polygon CurvePolygon、および MultiPolygon インスタンスの面積は 0 です。

閉鎖性

閉じている geography インスタンスは、始点と終点が同じである図形です。 Polygon インスタンスは閉じていると見なされます。 Point インスタンスは閉じていないと見なされます。

リングは、単純な閉じている LineString インスタンスです。

SRID (spatial reference ID)

SRID (spatial reference ID) は、geography インスタンスがどの楕円体座標系で表されているかを示す識別子です。 SRID が異なる 2 つの geography インスタンスを比較することはできません。

このプロパティは変更できます。

geography インスタンスの関係の特定

geography データ型には、2 つの geography インスタンスの関係を調べるために使用できる組み込みメソッドが数多く用意されています。

geography インスタンスでは必ずサポート対象の SRID を使用

SQL Server は、EPSG 標準に基づく SRID をサポートしています。 地理空間データを使用して計算を実行したりメソッドを使用したりする際には、SQL Server でサポートされている SRID を geography インスタンスで使用する必要があります (その SRID が、sys.spatial_reference_systems カタログ ビューに表示される SRID のいずれかに一致する必要があります)。 既に説明したように、geography データ型を使用して空間データの計算を実行する場合、計算結果は、データの作成に使用された楕円体によって異なります。これは、各楕円体に特定の SRID (spatial reference identifier) が割り当てられているからです。

SQL Server で使用される既定の SRID は 4326 です。SRID 4326 は、geography インスタンスのメソッドを使用する際に WGS 84 空間参照系にマップされます。 WGS 84 (SRID 4326) 以外の空間参照系のデータを使用する場合は、その地理空間データの SRID を確認する必要があります。

使用例

次の例は、geography 型のデータの追加方法とクエリ方法を示しています。

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

関連項目

概念

空間データ (SQL Server)