ジオメトリ インスタンスを作成、構築、クエリする
適用対象: SQL Server Azure SQL Database Azure SQL Managed Instance Microsoft Fabric の SQL 分析エンドポイント Microsoft Fabric のウェアハウス Microsoft Fabric のSQL データベース
平面空間データ型の 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 データ型には、既存のインスタンスに基づいて新しい geometry インスタンスを作成するために使用できる組み込みメソッドが数多く用意されています。
geometry の周りにバッファーを作成するには
STBuffer (geometry データ型)
BufferWithTolerance (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 データ型)
既知のテキスト入力から 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 データ型)
既知のバイナリ入力から geometry インスタンスを構築する
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 (geometry データ型)
WKB 入力から geometry MultiLineString インスタンスを構築するには
STMLineFromWKB (geometry データ型)
WKB 入力から geometry Polygon インスタンスを構築するには
STPolyFromWKB (geometry データ型)
WKB 入力から geometry MultiPolygon インスタンスを構築するには
STMPolyFromWKB (geometry データ型)
WKB 入力から geometry GeometryCollection インスタンスを構築するには
STGeomCollFromWKB (geometry データ型)
GML テキスト入力から geometry インスタンスを構築する
geometry データ型には、GML (幾何オブジェクトの XML 表現) から geometry インスタンスを生成するメソッドが用意されています。 SQL Server では、GML のサブセットをサポートします。
GML 入力から任意の型の geometry インスタンスを構築するには
GeomFromGml (geometry データ型)
ジオメトリ インスタンスから既知のテキストと既知のバイナリを返す
次のメソッドを使用して、 geometry インスタンスの WKT 形式または WKB 形式のいずれかを取得できます。
geometry インスタンスの WKT 表現を取得するには
STAsText (geometry データ型)
geometry インスタンスの WKT 表現を Z と M の値も含めて取得するには
AsTextZM (geometry データ型)
geometry インスタンスの WKB 表現を取得するには
STAsBinary (geometry データ型)
geometry インスタンスの GML 表現を取得するには
AsGml (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 (geometry データ型)
インスタンス上にある任意の点を取得するには
STPointOnSurface (geometry データ型)
インスタンスの始点を取得するには
STStartPoint (geometry データ型)
インスタンスのエンドポイントを返すには
STEndpoint (geometry データ型)
Point インスタンスの X 座標を取得するには
STX (geometry データ型)
Point インスタンスの Y 座標を取得するには
STY (geometry データ型)
Polygon、CurvePolygon、または MultiPolygon インスタンスの幾何学中心点を取得するには
STCentroid (geometry データ型)
分析コード
空でない geometry インスタンスの次元は、0 次元、1 次元、2 次元のいずれかになります。 0 次元の ジオメトリ( Point や MultiPointなど) には長さや面積はありません。 1 次元のオブジェクト ( LineString、CircularString、CompoundCurve、 MultiLineStringなど) には長さがあります。 2 次元のインスタンス ( Polygon、 CurvePolygon、 MultiPolygonなど) には面積と長さがあります。 空のインスタンスの次元は -1 としてレポートされます。 GeometryCollection でレポートされる面積は、その内容の型によって異なります。
インスタンスの次元を取得するには
STDimension (geometry データ型)
インスタンスの長さを取得するには
STLength (geometry データ型)
インスタンスの面積を取得するには
STArea (geometry データ型)
Empty
空の geometry インスタンスには点はありません。 空の LineString, CircularString、 CompoundCurve、および MultiLineString インスタンスの長さは 0 です。 空の Polygon、 CurvePolygon、および MultiPolygon インスタンスの面積は 0 です。
インスタンスが空かどうかを調べるには
STIsEmpty (geometry データ型)。
簡易
インスタンスの geometry が 単純であるためには、次の両方の要件が満たされている必要があります。
インスタンスの各図形が終点以外で自己交差していてはいけない。
インスタンスの 2 つの図形が、両方の図形の境界外部の点で互いに交差していてはいけない。
Note
空のジオメトリは常に単純です。
インスタンスが単純かどうかを調べるには
STIsSimple (geometry データ型)。
境界、内部、および外部
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 データ型)
Envelope
geometry インスタンスの エンベロープ ( 境界ボックスとも呼ばれます) とは、インスタンスの最小および最大の (X,Y) 座標によって形成される軸に沿った四角形です。
インスタンスのエンベロープを取得するには
STEnvelope (geometry データ型)
クロージャ
閉じているgeometry インスタンスは、始点と終点が同じである図形です。 Polygon インスタンスは閉じていると見なされます。 Point インスタンスは閉じていないと見なされます。
リングは、単純な閉じている LineString インスタンスです。
インスタンスが閉じているかどうかを調べるには
STIsClosed (geometry データ型)
インスタンスがリングかどうかを調べるには
STIsRing (geometry データ型)
Polygon インスタンスの外部リングを取得するには
STExteriorRing (geometry データ型)
Polygon の内部リングの数を取得するには
STNumInteriorRing (geometry データ型)
Polygon の指定した内部リングを取得するには
STInteriorRingN (geometry データ型)
空間参照 ID (SRID)
SRID (spatial reference ID) は、 geometry インスタンスがどの座標系で表されているかを示す識別子です。 SRID が異なる 2 つのインスタンスを比較することはできません。
インスタンスの SRID を設定または取得するには
STSrid (geometry データ型)
Note
このプロパティは変更できます。
ジオメトリ インスタンス間のリレーションシップを決定する
geometry データ型には、2 つの geometry インスタンスの関係を調べるために使用できる組み込みメソッドが数多く用意されています。
2 つのインスタンスが同じ点の集合で構成されているかどうかを調べるには
STEquals (geometry データ型)
2 つのインスタンスが互いに離れているかどうかを調べるには
STDisjoint (geometry データ型)
2 つのインスタンスが交差するかどうかを調べるには
STIntersects (geometry データ型)
2 つのインスタンスが相互に接しているかどうかを調べるには
STTouches (geometry データ型)
2 つのインスタンスが重なっているかどうかを調べるには
STOverlaps (geometry データ型)
2 つのインスタンスが交わるかどうかを調べるには
STCrosses (geometry データ型)
あるインスタンスが別のインスタンスに含まれているかどうかを調べるには
STWithin (geometry データ型)
あるインスタンスが別のインスタンスを含んでいるかどうかを調べるには
STContains (geometry データ型)
あるインスタンスが別のインスタンスと重なっているかどうかを調べるには
STOverlaps (geometry データ型)
2 つのインスタンスが空間的に関連するかどうかを調べるには
STRelate (geometry データ型)
2 つのジオメトリの点の間の最短距離を調べるには
STDistance (geometry データ型)
geometry インスタンスの既定値は 0 SRID
SQL Server の geometry インスタンスの既定の SRID は 0
。 geometry 空間データでは、空間インスタンスに特定の SRID がなくても計算を実行できます。したがって、インスタンスは未定義の平面空間に存在することができます。 geometryデータ型メソッドの計算で未定義の平面空間を示すために、SQL Server データベース エンジンは SRID 0
を使用します。
解説
Geometry と geography 型は、Microsoft Fabric の SQL 分析エンドポイントのテーブル列 または Microsoft Fabric の Warehouse では使用できません。
例
次の 2 つの例は、geometry 型のデータの追加方法とクエリ方法を示しています。
例 A.
この例では、ID 列と geometry
型の GeomCol1
列を含むテーブルを作成します。 3 番目の列で、 geometry
型の列をその Open Geospatial Consortium (OGC) の Well-Known Text (WKT) 表現で示し、 STAsText()
メソッドを使用します。 次に 2 つの行が挿入されます。1 つは、 LineString
の geometry
インスタンスを含む行で、もう 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
例 B。
この例では、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();