Oracle Spatial とは
Oracle Spatial は Oracle DBMS(データベース管理システム)のエクステンションであり、Oracle に空間タイプと空間検索関数を追加します。Oracle Spatial は 2 つの主要オプションで提供されています。
- Oracle Spatial は、Oracle Database Enterprise Edition のオプション機能です。SDO_Geometry タイプを提供し、追加の地理空間機能も提供します。
- Oracle Locator は、Oracle Spatial の機能のサブセットです。Oracle Locator は、Oracle Database Standard Edition および Enterprise Edition の標準機能として含まれています。特に、Oracle Spatial ジオメトリ タイプ(SDO_Geometry)と Oracle Spatial ジオメトリ タイプに対する SQL API を提供します。
Oracle Spatial は、ArcGIS など多くの地理情報システムと同じ機能を備えています。ほとんどの場合、ArcGIS ユーザが Oracle Spatial を主に利用する理由は、Oracle DBMS にジオデータベース格納とアクセスのためのオプション メカニズを追加するためです。基本的には、ArcGIS ユーザは Oracle ジオデータベースにフィーチャクラスまたはラスタ データセットを新規作成するたびに、フィーチャまたはラスタ ジオメトリの格納方法(ジオデータベース オプションと Oracle Spatial データ格納オプションのどちらか)を選択することができます。
ArcSDE は空間データの格納方式として Oracle SpatialのObject Relational Model をサポートしています。具体的には、Oracle Spatial または Locatorジオメトリを使用して、データセットのフィーチャおよびラスタを ArcSDE ジオデータベースに格納し、管理することができます。
Oracle Spatial データ格納の概要
Oracle Spatial には、次に説明する空間ジオメトリ タイプ(MDSYS.SDO_GEOMETRY)、空間メタデータ スキーマ、インデックス手法、関数、および実装ルールが用意されています。
Oracle Locator は、Oracle Spatial のサブセットです。Oracle Locatorには、SDO_GEOMETRY データ タイプに加えて、Oracle Spatial によって提供される機能の一部が含まれています。Oracle Locator は、ArcSDE で使用することができます。Oracle Spatial と Oracle Locator の違いについては、Oracle のドキュメントをご参照ください。このトピックでは、「Oracle Spatial」を「Oracle Locator」に置き換えて読む事ができます。
-
SDO_GEOMETRY
Oracle Spatial ジオメトリ タイプ(SDO_GEOMETRY)は Oracle の拡張可能なオブジェクト リレーショナル タイプ システムで実装されています。SDO_GEOMETRY タイプには、ジオメトリ タイプ、空間参照 ID、補間タイプ(直線と曲線)、座標値を含め、ジオメトリに関する情報が格納されます。SDO_GEOMETRY タイプでは、シングルおよびマルチパートのポイント、ライン、エリア ジオメトリがサポートされます。ジオメトリは、OpenGIS Simple Feature Specification によって定義されているように、座標間が線形に補間されたものと説明できます。ジオメトリは、曲線または両方の補間方式の組み合わせからも構築できます。アプリケーション プログラムは Oracle のオブジェクト リレーショナル SQL インタフェースを使用して、SDO_GEOMETRY タイプのコンテンツを正しく挿入、更新、および取得しなければなりません。また、各ジオメトリのコンテンツを Oracle Spatial ドキュメントに定義されているルールに準拠させる必要もあります。Oracle には、ジオメトリを挿入した後に実行できるジオメトリ整合チェック ルーチンが用意されています。また、Oracle 11.1.0.7 からは、インデックスの挿入においてジオメトリが整合チェックされます。
メモ:Oracle のジオメトリ整合チェック ルーチンでは、ArcSDE のジオメトリの整合チェックとまったく同じルールが実装されているわけではありません。ただし、ArcSDE は Oracle の整合チェックルールを満たす SDO_GEOMETRY を作成するように設計されています。
-
メタデータ スキーマ
各 SDO_GEOMETRY 列に関する情報は Oracle Spatial メタデータ スキーマに記録する必要がありますが、Oracle Spatial はこれを自動的に行いません。(Oracle Spatial メタデータ スキーマは、USER_SDO_GEOM_METADATA ビューとしてスキーマごとに公開されます。)SDO_GEOMETRY 列を作成するソフトウェアは、それらの列にメタデータを挿入しなければなりません。ArcSDE で作成するすべての SDO_GEOMETRY フィーチャクラスでは、これが自動的に行われます。メタデータには、空間列の名前、空間列が含まれているテーブルの名前とその所有者、Oracle SRID(Spatial Reference Identifier)、ディメンションの数、各ディメンションの範囲、その座標許容値が含まれています。
-
空間インデックス
空間インデックスはフィーチャのジオメトリの位置に基づいて、フィーチャにすばやくアクセスできるようにします。SDO_GEOMETRY の場合は、R ツリー空間インデックスが一般に最も効率的で、最も簡単に作成できます。Oracle では、ほとんどの状況で R ツリー空間インデックスの使用を推奨しています。Oracle Spatial には、特定のテーブルに最適な空間インデックスの種類を決定するのに役立つ、Spatial Index Advisor ユーティリティが用意されています。サポートされている空間インデックスの種類、それらを作成する方法、空間インデックス手法間のトレードオフについては、『Oracle Spatial ユーザーズガイドおよびリファレンス』をご参照ください。
-
空間関数
Oracle Spatial は SQL を 1 次フィルタリングと 2 次フィルタリングのための空間検索関数で拡張します。SQL クエリに SDO_FILTER 関数を追加すると、空間インデックスを使用した 1 次空間検索が実行されます。SDO_RELATE や SDO_CONTAINS といった空間述語は、SDO_GEOMETRY オブジェクト ペア間の 2 次リレーションシップを返します。Oracle Spatial には SDO_GEOMETRY 値の形式を変更する空間変換関数があります。たとえば、SDO_BUFFER 関数は新しい SDO_GEOMETRY オブジェクトの座標を、元のジオメトリから特定の距離にあるバッファ ポリゴンとして計算します。その他の空間変換関数には、SDO_DIFFERENCE と SDO_INTERSECTION などがあります。
-
座標参照と SRID
Oracle Spatial は SRID 値を使用して、定義済みの座標参照系にアクセスします。SRID 値は SDO_GEOMETRY オブジェクトに格納され、そのオブジェクトに格納されたジオメトリの座標参照を指定します。SDO_GEOMETRY オブジェクトの SRID が NULL でなければ、各 SRID の詳細を含んでいるテーブルへの外部キーとなります。このテーブルは MDSYS.CS_SRS です。SDO_TRANSFORM 関数は座標参照変換を確立するために SRID を使用します。ArcSDE もこの情報を使用して ArcSDE 空間参照を作成します。