平面空間データ型の geometry は、ユークリッド (平面) 座標系のデータを表します。 この型は、SQL Server では共通言語ランタイム (CLR) のデータ型として実装されています。
geometry 型は定義済みで、各データベースで使用可能です。 geometry 型のテーブル列を作成し、他の CLR 型を使用するときと同じように geometry データを操作できます。
SQL Server によってサポートされている geometry データ型 (平面) は、Open Geospatial Consortium (OGC) Simple Features for SQL Specification version 1.1.0 に準拠しています。
OGC の仕様の詳細については、以下を参照してください。
SQL Server は、次のスキーマで定義される既存の GML 3.1 標準のサブセットをサポートしています: https://schemas.microsoft.com/sqlserver/profiles/gml/SpatialGML.xsd。
このトピックの内容
新しい geometry インスタンスの作成または構築
既存のインスタンスからの新しい geometry インスタンスの作成
Well-Known Text 入力からの geometry インスタンスの構築
Well-Known Binary 入力からの geometry インスタンスの構築
GML Text 入力からの geometry インスタンスの構築
geometry インスタンスからの Well-Known Text および Well-Known Binary の取得
geometry インスタンスのプロパティと動作のクエリ
有効性、インスタンスの型、および GeometryCollection 情報
点の数
次元
空
境界、内部、および外部
エンベロープ
閉鎖性
SRID (spatial reference ID)
geometry インスタンス間の関係の特定
geometry インスタンスの既定の SRID は 0
使用例
新しい geometry インスタンスの作成または構築
既存のインスタンスからの新しい geometry インスタンスの作成
geometry データ型には、既存のインスタンスに基づいて新しい geometry インスタンスを作成するために使用できる組み込みメソッドが数多く用意されています。
geometry の周りにバッファーを作成するには
STBuffer (geometry データ型)簡素化されたバージョンの geometry を作成するには
Reduce (geometry データ型)geometry の凸包を作成するには
STConvexHull (geometry データ型)2 つの geometry の積集合から geometry を作成するには
STIntersection (geometry データ型)2 つの geometry の和集合から geometry を作成するには
STUnion (geometry データ型)一方の geometry の、もう一方の geometry と重なる部分を除いた点から geometry を作成するには
STDifference (geometry データ型)2 つの geometry の重なる部分を除いた点から geometry を作成するには
STSymDifference (geometry データ型)既存の geometry 上にある任意の Point インスタンスを作成するには
STPointOnSurface (geometry データ型)
[先頭に戻る]
Well-Known Text 入力からの geometry インスタンスの構築
geometry データ型には、Open Geospatial Consortium (OGC) WKT 表現からジオメトリを生成する組み込みのメソッドが数多く用意されています。 WKT 標準は geometry データをテキスト形式で交換できるテキスト文字列です。
WKT 入力から任意の型の geometry インスタンスを構築するには
STGeomFromText (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 入力から geometry MultiPolygon インスタンスを構築するには
STMPolyFromText (geometry データ型)WKT 入力から geometry GeometryCollection インスタンスを構築するには
STGeomCollFromText (geometry データ型)
[先頭に戻る]
Well-Known Binary 入力からの geometry インスタンスの構築
WKB は、geometry データをアプリケーションと SQL データベース間で交換することができる、Open Geospatial Consortium (OGC) で指定されたバイナリ形式です。 次の関数は、WKB 入力を受け入れてジオメトリを構築します。
WKB 入力から任意の型の geometry インスタンスを構築するには
STGeomFromWKB (geometry データ型)WKB 入力から geometry Point インスタンスを構築するには
STPointFromWKB (geometry データ型)WKB 入力から geometry MultiPoint インスタンスを構築するには
STMPointFromWKB (geometry データ型)WKB 入力から geometry LineString インスタンスを構築するには
STLineFromWKB (geometry データ型)WKB 入力から geometry MultiLineString インスタンスを構築するには
STMLineFromWKB (geometry データ型)WKB 入力から geometry Polygon インスタンスを構築するには
STPolyFromWKB (geometry データ型)WKB 入力から geometry MultiPolygon インスタンスを構築するには
STMPolyFromWKB (geometry データ型)WKB 入力から geometry GeometryCollection インスタンスを構築するには
STGeomCollFromWKB (geometry データ型)
[先頭に戻る]
GML Text 入力からの geometry インスタンスの構築
geometry データ型には、GML (幾何オブジェクトの XML 表現) から geometry インスタンスを生成するメソッドが用意されています。 SQL Server では、GML のサブセットをサポートします。
- GML 入力から任意の型の geometry インスタンスを構築するには
GeomFromGml (geometry データ型)
[先頭に戻る]
geometry インスタンスからの Well-Known Text および Well-Known Binary の取得
次のメソッドを使用して、geometry インスタンスの WKT 形式または WKB 形式のいずれかを取得できます。
geometry インスタンスの WKT 表現を取得するには
STAsText (geometry データ型)geometry インスタンスの WKT 表現を Z と M の値も含めて取得するには
AsTextZM (geometry データ型)geometry インスタンスの WKB 表現を取得するには
STAsBinary (geometry データ型)geometry インスタンスの GML 表現を取得するには
AsGml (geometry データ型)
[先頭に戻る]
geometry インスタンスのプロパティと動作のクエリ
すべての geometry インスタンスには、SQL Server のメソッドを使用して取得できるいくつかのプロパティがあります。 以下のトピックでは、geometry 型のプロパティおよび動作と、geometry 型のクエリを実行するためのメソッドについて説明します。
有効性、インスタンスの型、および GeometryCollection 情報
geometry インスタンスを構築したら、次のメソッドを使用して、そのインスタンスが適切な形式であるかどうかを確認したり、インスタンスの型を取得することができます。また、コレクション インスタンスの場合は、特定の geometry インスタンスを取得できます。
geometry のインスタンスの型を取得するには
STGeometryType (geometry データ型)geometry が特定のインスタンスの型であるかどうかを調べるには
InstanceOf (geometry データ型)geometry インスタンスがそのインスタンスの型に対応する適切な形式であるかどうかを調べるには
STIsValid (geometry データ型)geometry インスタンスをインスタンスの型に対応する適切な形式の geometry インスタンスに変換するには
MakeValid (geometry データ型)geometry コレクション インスタンス内のジオメトリの数を取得するには
STNumGeometries (geometry データ型)geometry コレクション インスタンス内の特定の geometry を取得するには
STGeometryN (geometry データ型)STGeometryN (geometry データ型)
[先頭に戻る]
点の数
空でないすべての geometry インスタンスは点で構成されています。 これらの点は、ジオメトリが描画される平面の X 座標と Y 座標を表します geometry には、インスタンスの点に対するクエリを実行するための組み込みメソッドが数多く用意されています。
インスタンスを構成する点の数を取得するには
STNumPoints (geometry データ型)インスタンスの特定の点を取得するには
STPointNインスタンス上にある任意の点を取得するには
STPointOnSurfaceインスタンスの始点を取得するには
STStartPointインスタンスの終点を取得するには
STEndpointPoint インスタンスの X 座標を取得するには
STX (geometry データ型)Point インスタンスの Y 座標を取得するには
STYPolygon、CurvePolygon、または MultiPolygon インスタンスの幾何学中心点を取得するには
STCentroid
[先頭に戻る]
次元
空でない geometry インスタンスの次元は、0 次元、1 次元、2 次元のいずれかになります。 0 次元の geometries (Point や MultiPoint など) には長さや面積はありません。 1 次元のオブジェクト (LineString CircularString CompoundCurve、MultiLineString など) には長さがあります。 2 次元のインスタンス (Polygon、CurvePolygon、MultiPolygon など) には面積と長さがあります。 空のインスタンスの次元は -1 としてレポートされます。GeometryCollection でレポートされる面積は、その内容の型によって異なります。
インスタンスの次元を取得するには
STDimensionインスタンスの長さを取得するには
STLengthインスタンスの面積を取得するには
STArea
[先頭に戻る]
空
空の geometry インスタンスには点はありません。 空の LineString, CircularString、CompoundCurve、および MultiLineString インスタンスの長さは 0 です。 空の Polygon、CurvePolygon、および MultiPolygon インスタンスの面積は 0 です。
- インスタンスが空かどうかを調べるには
STIsEmpty
[先頭に戻る]
単純
インスタンスの geometry が単純であるためには、次の両方の要件が満たされている必要があります。
インスタンスの各図形が終点以外で自己交差していてはいけない。
インスタンスの 2 つの図形が、両方の図形の境界外部の点で互いに交差していてはいけない。
注 |
|---|
空のジオメトリは常に単純です。 |
- インスタンスが単純かどうかを調べるには
STIsSimple.
[先頭に戻る]
境界、内部、および外部
geometry インスタンスの内部とは、インスタンスによって占有されている空間です。占有されていない空間は外部です。
境界は、OGC によって次のように定義されています。
Point インスタンスと MultiPoint インスタンスには境界はありません。
LineString と MultiLineString の境界は、始点と終点 (偶数回出現するものを除く) によって形成されます。
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インスタンスがリングかどうかを調べるには
STIsRingPolygon インスタンスの外部リングを取得するには
STExteriorRingPolygon の内部リングの数を取得するには
STNumInteriorRingPolygon の指定した内部リングを取得するには
STInteriorRingN
[先頭に戻る]
SRID (spatial reference ID)
SRID (spatial reference ID) は、geometry インスタンスがどの座標系で表されているかを示す識別子です。 SRID が異なる 2 つのインスタンスを比較することはできません。
- インスタンスの SRID を設定または取得するには
STSrid
このプロパティは変更できます。
[先頭に戻る]
geometry インスタンス間の関係の特定
geometry データ型には、2 つの geometry インスタンスの関係を調べるために使用できる組み込みメソッドが数多く用意されています。
2 つのインスタンスが同じ点の集合で構成されているかどうかを調べるには
STEquals2 つのインスタンスが互いに離れているかどうかを調べるには
STDisjoint2 つのインスタンスが交差するかどうかを調べるには
STIntersects2 つのインスタンスが相互に接しているかどうかを調べるには
STTouches2 つのインスタンスが重なっているかどうかを調べるには
STOverlaps2 つのインスタンスが交わるかどうかを調べるには
STCrossesあるインスタンスが別のインスタンスに含まれているかどうかを調べるには
STWithinあるインスタンスが別のインスタンスを含んでいるかどうかを調べるには
STContainsあるインスタンスが別のインスタンスと重なっているかどうかを調べるには
STOverlaps2 つのインスタンスが空間的に関連するかどうかを調べるには
STRelate2 つのジオメトリの点の間の最短距離を調べるには
STDistance
[先頭に戻る]
geometry インスタンスの既定の SRID は 0
SQL Server の geometry インスタンスの既定の SRID は 0 です。 geometry 空間データでは、空間インスタンスに特定の SRID がなくても計算を実行できます。したがって、インスタンスは未定義の平面空間に存在することができます。 SQL Server データベース エンジンでは、geometry データ型のメソッドの計算で未定義の平面空間を表すために SRID 0 が使用されます。
使用例
次の 2 つの例は、geometry 型のデータの追加方法とクエリ方法を示しています。
最初の例では、ID 列と geometry 型の GeomCol1 列を含むテーブルを作成します。 3 番目の列で、geometry 型の列をその Open Geospatial Consortium (OGC) の Well-Known Text (WKT) 表現で示し、STAsText() メソッドを使用します。 次に 2 つの行が挿入されます。1 つは、geometry の 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), 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)); GO2 番目の例では、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();
[先頭に戻る]
注