次の方法で共有


空間型 - geometry (Transact-SQL)

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

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

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

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

geometry 型の登録

geometry 型は、各データベースで使用できるように事前に定義されています。 geometry 型のテーブル列を作成し、他の CLR 型を使用するときと同じように geometry データを操作できます。 保存される計算列と保存されない計算列で使用できます。

Remarks

Microsoft Fabric の SQL データベースでは、 地理 データ型と ジオメトリ データ型はサポートされていますが、 Fabric OneLake にミラー化することはできません。

Examples

A. geometry 型のデータの追加方法とクエリ方法を示す

次の 2 つの例は、geometry 型のデータの追加方法とクエリ方法を示しています。 最初の例では、ID 列と geometry 型の GeomCol1列を含むテーブルを作成します。 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  

B. 2 つの geometry インスタンスが交差する地点を返す

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

C. 計算列で geometry 型を使用する

次の例では、geometry 型を使用して、保存される計算列を持つテーブルを作成します。

IF OBJECT_ID ( 'dbo.SpatialTable', 'U' ) IS NOT NULL   
    DROP TABLE dbo.SpatialTable;  
GO  
  
CREATE TABLE SpatialTable  
(  
    locationId int IDENTITY(1,1),  
    location geometry,  
    deliveryArea as location.STBuffer(10) persisted  
)  

こちらもご覧ください

空間データ (SQL Server)