空間データの型
空間データには 2 つの型があります。geometry データ型は平面 (ユークリッド (平面地球)) データをサポートし、Open Geospatial Consortium (OGC) Simple Features for SQL Specification version 1.1.0 に準拠しています。
SQL Server ではそのほかに、geography データ型もサポートされています。このデータ型は、GPS の緯度経度座標などの楕円体 (球体地球) データを格納します。
geometry データ型と geography データ型は、11 の空間データ オブジェクト (インスタンス型) をサポートしています。ただし、インスタンス化可能なインスタンス型 (データベースでインスタンスを作成して使用することができる (インスタンス化できる) インスタンス型) は、それらのうちの 7 つだけです。これらのインスタンスは、親データ型から派生するプロパティによって、Points、LineStrings、Polygons、または GeometryCollection 内の複数の geometry インスタンスや geography インスタンスとして識別されます。
次の図は、geometry の階層を表しています。geometry データ型と geography データ型はこの階層に基づいています。geometry と geography のインスタンス化可能な型は青で示されています。
図に示されているように、geometry データ型と geography データ型のインスタンス化可能な型は、Point、MultiPoint、LineString、MultiLineString、Polygon、MultiPolygon、および GeometryCollection の 7 つです。geometry 型および geography 型は、特定のインスタンスが適切な形式のインスタンスである限り、明示的に定義されていない場合でも、そのインスタンスを認識できます。たとえば、STPointFromText() メソッドを使用して Point インスタンスを明示的に定義した場合、そのインスタンスは、メソッドの入力が適切な形式である限り、geometry と geography によって Point として認識されます。同じインスタンスを STGeomFromText() メソッドを使用して定義した場合は、geometry データ型と geography データ型の両方で Point として認識されます。
これらのインスタンスの詳細については、次のトピックを参照してください。
2 つのデータ型の違い
2 つの空間データ型の動作はよく似ていますが、データの格納および操作の方法にいくつかの重要な違いがあります。
接続エッジの定義方法
LineString 型と Polygon 型の定義データは頂点のみです。geometry 型の 2 つの頂点間の接続エッジは直線です。一方、geography 型の 2 つの頂点間の接続エッジは、2 つの頂点を結ぶ短い方の大楕円弧です。大楕円は、楕円体とその中心を通る平面との交線であり、大楕円弧は、大楕円の円弧セグメントです。
空間データ型の測定
平面 (平面地球) 座標系では、距離や面積の測定値は座標と同じ測定単位で表されます。geometry データ型を使用した場合、(2, 2) と (5, 6) の間の距離は、使用されている単位に関係なく 5 単位になります。
楕円体 (球体地球) 座標系では、座標は緯度と経度で表されます。ただし、長さと面積は、geography インスタンスの SRID (Spatial Reference Identifier) によっても異なりますが、通常はメートルと平方メートルで測定されます。メートルは、geography データ型の最も一般的な測定単位です。
空間データの方向
平面座標系では、ポリゴンのリングの方向は重要ではありません。たとえば、((0, 0), (10, 0), (0, 20), (0, 0)) によって表されるポリゴンは、((0, 0), (0, 20), (10, 0), (0, 0)) によって表されるポリゴンと同じです。OGC Simple Features for SQL Specification では、リングの順序は定められていません。SQL Server でもリングの順序は強制されません。
楕円体座標系では、ポリゴンは方向がないと意味がなくなります (あいまいになります)。たとえば、赤道の周りのリングが北半球を表すのか南半球を表すのかがわからなくなります。geography データ型を使用して空間インスタンスを格納する場合は、リングの方向を指定し、インスタンスの位置を正確に示す必要があります。
SQL Server 2008 には、geography データ型の使用について次の制限があります。
各 geography インスタンスが 1 つの半球に収まる必要があります。半球よりも大きい空間オブジェクトを格納することはできません。
Open Geospatial Consortium (OGC) の Well-Known Text (WKT) 表現または Well-Known Binary (WKB) 表現の geography インスタンスでは、半球より大きいオブジェクトが生成される場合に ArgumentException がスローされます。
2 つの geography インスタンスを必要とする geography データ型のメソッド (STIntersection()、STUnion()、STDifference()、STSymDifference() など) では、メソッドの結果が 1 つの半球に収まらない場合に null が返されます。STBuffer() でも、出力が 1 つの半球に収まらない場合に null が返されます。
geography データ型では外部リングと内部リングは重要ではない
OGC Simple Features for SQL Specification では外部リングと内部リングが取り上げられていますが、SQL Server の geography データ型ではこの区別はほとんど意味を持ちません。ポリゴンのリングはすべて外部リングと見なすことができます。
OGC の仕様の詳細については、以下を参照してください。