次の方法で共有


ジオメトリ インスタンスの作成、構築、クエリ

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

geometryの種類は定義済みであり、各データベースで使用できます。 geometry型のテーブル列を作成し、他の CLR 型を使用するのと同じ方法でgeometryデータを操作できます。

SQL Server でサポートされる geometry データ型 (平面) は、OPEN Geospatial Consortium (OGC) Simple Features for SQL Specification バージョン 1.1.0 に準拠しています。

OGC 仕様の詳細については、次を参照してください。

SQL Server では、次のスキーマで定義されている既存の GML 3.1 標準のサブセットがサポートされています: https://schemas.microsoft.com/sqlserver/profiles/gml/SpatialGML.xsd

新しいジオメトリ インスタンスの作成または構築

既存のインスタンスから新しいジオメトリ インスタンスを作成する

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

ジオメトリの周囲にバッファーを作成するには
STBuffer (geometry のデータ型)

BufferWithTolerance (ジオメトリ データ型)

ジオメトリの簡易バージョンを作成するには
Reduce (ジオメトリデータ型)

ジオメトリの凸包を作成するには
STConvexHull (ジオメトリ データ型)

2 つのジオメトリの交差部分からジオメトリを作成するには
STIntersection (geometry データ型)

2 つのジオメトリの和集合からジオメトリを作成するには
STUnion (geometry データ型)

あるジオメトリが別のジオメトリと重なっていないポイントからジオメトリを作成するには
STDifference (ジオメトリ型データ)

2 つのジオメトリが重なっていないポイントからジオメトリを作成するには
STSymDifference (ジオメトリ データ型)

既存のジオメトリ上にある任意の Point インスタンスを作成するには
STPointOnSurface (geometry データ型)

ジオメトリインスタンスWell-Knownをテキスト入力から構築する

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

WKT 入力から任意のジオメトリ インスタンスを構築するには
STGeomFromText (ジオメトリ データ型)

Parse (geometry データ型)

WKT 入力から geometry Point インスタンスを構築するには
STPointFromText (geometry データ型)

WKT 入力から geometry MultiPoint インスタンスを構築するには
「STMPointFromText」(geometry データ型)

WKT 入力から geometry LineString インスタンスを構築するには
STLineFromText (geometry データ型)

WKT 入力から geometry MultiLineString インスタンスを構築するには
STMLineFromText (geometry データ型)

WKT 入力から geometry Polygon インスタンスを構築するには
STPolyFromText (geometry データ型)

WKT入力からジオメトリのMultiPolygonインスタンスを構築する
STMPolyFromText (geometry データ型)

WKT 入力から geometry GeometryCollection インスタンスを構築するには
STGeomCollFromText (ジオメトリ データ型)

Well-Known バイナリ入力からジオメトリインスタンスを構築する

WKB は Open Geospatial Consortium (OGC) で指定されたバイナリ形式で、クライアント アプリケーションと SQL データベース間で geometry データを交換できます。 次の関数は、WKB 入力を受け入れてジオメトリを構築します。

WKB 入力から任意の種類の geometry インスタンスを構築するには
STGeomFromWKB (geometry データ型)

WKB 入力から geometry Point インスタンスを構築するには
STPointFromWKB (geometry データ型)

WKB 入力から geometry MultiPoint インスタンスを構築するには
STMPointFromWKB (geometry データ型)

WKB 入力から geometry LineString インスタンスを構築するには
STLineFromWKB (ジオメトリ データ型)

WKB 入力から geometry MultiLineString インスタンスを構築するには
STMLineFromWKB (geometry データ型)

WKB 入力から geometry Polygon インスタンスを構築するには
STPolyFromWKB (geometry データ型)

WKB 入力からジオメトリ複数ポリゴンインスタンスを作成するには
STMPolyFromWKB (geometry データ型)

WKB入力からGeometryCollectionに対するジオメトリインスタンスを構築するには
STGeomCollFromWKB (geometry データ型)

GML テキスト入力から geometry インスタンスを構築する

geometry データ型は、ジオメトリ オブジェクトの XML 表現である GML からgeometry インスタンスを生成するメソッドを提供します。 SQL Server では、GML のサブセットがサポートされています。

GML 入力から任意の種類の geometry インスタンスを構築するには
GeomFromGml (geometry データ型)

geometry インスタンスから Well-Known Text と Well-Known Binary を返す

次のメソッドを使用して、 geometry インスタンスの WKT 形式または WKB 形式を返すことができます。

ジオメトリ インスタンスの WKT 表現を返すには
STAsText (geometry データ型)

ToString (geometry データ型)

任意の Z 値と M 値を含むジオメトリ インスタンスの WKT 表現を返すには
AsTextZM (ジオメトリ データ型)

ジオメトリ インスタンスの WKB 表現を返すには
STAsBinary (geometry データ型)

ジオメトリ インスタンスの GML 表現を返すには
AsGml (geometry データ型)

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

すべての geometry インスタンスには、SQL Server が提供するメソッドを使用して取得できるプロパティが多数用意されています。 次のトピックでは、ジオメトリの種類のプロパティと動作、およびそれぞれを照会するためのメソッドを定義します。

有効性、インスタンスの種類、GeometryCollection情報

geometry インスタンスが構築されたら、次のメソッドを使用して、整形式かどうかを判断するか、インスタンス型を返すか、コレクション インスタンスの場合は特定のgeometry インスタンスを返すことができます。

ジオメトリのインスタンス型を返すには
STGeometryType (ジオメトリ データ型)

ジオメトリが特定のインスタンス型であるかどうかを判断するには
インスタンスオブ (geometry データ型)

ジオメトリ インスタンスがそのインスタンス型に対して正しく構成されているかどうかを判断するには
STIsValid (geometry データ型)

ジオメトリ インスタンスを、特定のインスタンスタイプの整形式ジオメトリ インスタンスに変換するには
MakeValid (ジオメトリ データ型)

geometry コレクション インスタンス内のジオメトリの数を返すには
STNumGeometries (geometry データ型)

ジオメトリ コレクション内で特定のジオメトリを返すには
STGeometryN (ジオメトリ データ型)STGeometryN (ジオメトリ データ型)

ポイント数

すべての空でない geometry インスタンスは、 ポイントで構成されます。 これらの点は、ジオメトリが描画される平面の X 座標と Y 座標を表します。 geometry には、インスタンスのポイントに対してクエリを実行するための多数の組み込みメソッドが用意されています。

インスタンスを構成するポイントの数を返すには
STNumPoints (ジオメトリ データ型)

インスタンス内の特定のポイントを返すには
STPointN

インスタンス上にある任意のポイントを返すには
STPointOnSurface

インスタンスの開始点を返すには
STStartPoint

インスタンスの終点を返すには
STEndpoint

Point インスタンスの X 座標を返すには
STX (geometry データ型)

Point インスタンスの Y 座標を返すには
スタイル

Polygon、CurvePolygon、または MultiPolygon インスタンスのジオメトリ中心点を返すには
STCentroid

ディメンション

空でない geometry インスタンスには、0 次元、1 次元、または 2 次元を指定できます。 PointMultiPointなどの 0 次元geometriesには、長さや面積がありません。 LineString, CircularString, CompoundCurveMultiLineStringなどの 1 次元オブジェクトには長さがあります。 PolygonCurvePolygonMultiPolygonなどの 2 次元インスタンスには、面積と長さがあります。 空のインスタンスは -1 のディメンションを報告し、 GeometryCollection はその内容の種類に依存する領域を報告します。

インスタンスのディメンションを返すには
STDimension

インスタンスの長さを返すには
STLength

インスタンスの領域を返すには
STArea

空っぽ

geometry インスタンスにはポイントがありません。 空の LineString, CircularStringCompoundCurve、および MultiLineString インスタンスの長さは 0 です。 空の PolygonCurvePolygon、および MultiPolygon インスタンスの領域は 0 です。

インスタンスが空かどうかを確認するには
STIsEmpty

簡単

インスタンスの geometry単純にするには、次の両方の要件を満たす必要があります。

  • インスタンスの各図形は、そのエンドポイントを除き、それ自体と交差してはなりません。

  • インスタンスの 2 つの図形は、両方の境界にない点で相互に交差することはできません。

空のジオメトリは常に単純です。

インスタンスが単純かどうかを判断するには
STIsSimple

境界、内部、および外部

geometry インスタンスの内部はインスタンスによって占有される空間であり、外部は占有されていない空間です。

境界 は OGC によって次のように定義されます。

  • Point および MultiPoint インスタンスには境界がありません。

  • LineStringMultiLineString 境界は始点と終点によって形成され、偶数回発生するものは削除されます。

DECLARE @g geometry;  
SET @g = geometry::Parse('MULTILINESTRING((0 1, 0 0, 1 0, 0 1), (1 1, 1 0))');  
SELECT @g.STBoundary().ToString();  

PolygonまたはMultiPolygon インスタンスの境界は、そのリングのセットです。

DECLARE @g geometry;  
SET @g = geometry::Parse('POLYGON((0 0, 3 0, 3 3, 0 3, 0 0), (1 1, 1 2, 2 2, 2 1, 1 1))');  
SELECT @g.STBoundary().ToString();  

インスタンスの境界を返すには
STBoundary

封筒

geometry インスタンスのエンベロープ (境界ボックスとも呼ばれます) は、インスタンスの最小座標と最大値 (X,Y) 座標で形成される軸で整列された四角形です。

インスタンスのエンベロープを返すには
STEnvelope

クローズ

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

リングは、単純で閉じた LineString インスタンスです。

インスタンスが閉じているかどうかを確認するには
STIsClosed

インスタンスがリングであるかどうかを判断するには
STIsRing

Polygon インスタンスの外部リングを返すには
STExteriorRing

多角形内の内部リングの数を返すには
STNumInteriorRing

Polygon の指定した内部リングを返すには
STInteriorRingN

空間参照識別子 ID (SRID)

空間参照 ID (SRID) は、 geometry インスタンスが表す座標系を指定する識別子です。 SRID が異なる 2 つのインスタンスは比較できません。

インスタンスの SRID を設定または返すには
STSrid

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

ジオメトリ インスタンス間のリレーションシップの決定

geometry データ型には、2 つのgeometry インスタンス間のリレーションシップを決定するために使用できる多くの組み込みメソッドが用意されています。

2 つのインスタンスが同じポイント セットを構成しているかどうかを判断するには
STEquals

2 つのインスタンスが不整合かどうかを判断するには
STDisjoint

2 つのインスタンスが交差するかどうかを判断するには
STIntersects

2 つのインスタンスがタッチするかどうかを判断するには
STTouches

2 つのインスタンスが重複しているかどうかを判断するには
STOverlaps

2 つのインスタンスが交差するかどうかを判断するには
STCrosses

あるインスタンスが別のインスタンス内にあるかどうかを判断するには
STWithin

あるインスタンスに別のインスタンスが含まれているかどうかを確認するには
STContains

1 つのインスタンスが別のインスタンスと重複しているかどうかを判断するには
STOverlaps

2 つのインスタンスが空間的に関連しているかどうかを判断するには
STRelate

2 つのジオメトリ内のポイント間の最短距離を決定するには
STDistance

geometry インスタンスの既定値は 0 SRID

SQL Server の geometry インスタンスの既定の SRID は 0 です。 空間データ geometry 場合、空間インスタンスの特定の SRID は計算を実行する必要はありません。したがって、インスタンスは未定義の平面空間に存在できます。 geometryデータ型メソッドの計算で未定義の平面空間を示すために、SQL Server データベース エンジンは SRID 0 を使用します。

例示

次の 2 つの例は、ジオメトリ データを追加およびクエリする方法を示しています。

  • 最初の例では、ID 列と geometryGeomCol1を含むテーブルを作成します。 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  
    
  • 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();  
    

こちらもご覧ください

空間データ (SQL Server)