SDO_GEOMETRY と ArcGIS

ジオデータベースの SDO_GEOMETRY 格納でフィーチャクラスを作成すると、次の処理が発生します。

SDO_GEOMETRY 列を含むテーブルが作成されます。

Oracle のジオデータベースにフィーチャクラスを作成するときに、GEOMETRY_STORAGE パラメーターが SDO_GEOMETRY に設定された DBTUNE コンフィグレーション キーワードを指定すると、ArcGIS は、シェープ フィールドに SDO_GEOMETRY 列を使用します。

次の例のフィーチャクラスには、一意の識別子 (ObjectID) フィールド、NAME 属性と POPULATION 属性、および SDO_GEOMETRY シェープ列があります。

名前データ タイプNULL?

NAME

VARCHAR2(32)*

POPULATION

NUMBER(11)

SHAPE

MDSYS.SDO_GEOMETRY

OBJECTID

NUMBER(38)

NOT NULL

メモ:

*Unicode 文字列を使用する場合は VARCHAR2(32) ではなく NVARCHAR2(32) が使用されます。

SDO_GEOMETRY 列に空間インデックスが作成されます。

ArcGIS は、デフォルトでフィーチャクラスの SDO_GEOMETRY 列に R ツリー空間インデックスを作成します。ArcGIS は Oracle の SDO_FILTER ファンクションを使用してフィーチャクラスに対して空間検索を実行するため、空間検索に空間インデックスが必要です。

ArcGIS はフィーチャクラスの LOAD_ONLY_IO モードと NORMAL_IO モードが切り替えられるたびに、ArcGIS によって作成された Oracle Spatial インデックスを自動的に削除して再作成します。Oracle Spatial Index Advisor アプリケーションによって定義された空間インデックス、または SQL を使って作成された空間インデックスは、ArcGIS がフィーチャクラスを LOAD_ONLY_IO モードに切り替えても削除されません。

Oracle Spatial メタデータ ビューにレコードが追加されます。

ArcGIS が SDO_GEOMETRY 列を含むフィーチャクラスを作成するときに、必要な Oracle Spatial メタデータ レコードが USER_SDO_GEOM_METADATA ビューに追加されます。このメタデータには、テーブルの名前、SDO_GEOMETRY 列の名前、SRID、および座標ディメンション情報が含まれています。

ArcGIS を使用してフィーチャクラスを削除すると、Oracle Spatial メタデータも削除されます。

座標ディメンションが指定されます。

ArcGIS のジオメトリは、2D (X、Y)、2D とメジャー (X、Y、M)、3D (X、Y、Z)、または 3D とメジャー (X、Y、Z、M) で作成できます。SDO_GEOMETRY 列を含む新しいフィーチャクラスを作成すると、ArcGIS によって、メタデータ ビューの DIMINFO 列に Oracle Spatial ディメンション情報が配置されます。

  • X 座標は最初のディメンションです。
  • Y 座標は第 2 ディメンションです。
  • フィーチャクラスが標高付きで定義されている場合の Z 座標は第 3 ディメンションです。
  • フィーチャクラスがメジャー付きで定義されている場合の M 座標が最後のディメンションです (Z 座標が存在するかどうかに応じて、第 3 または第 4 ディメンション)。

SDO_GEOMETRY 列にデータが設定されます。

ジオデータベースにジオメトリを格納する際、ArcGIS は SE_SHAPE という名前の API オブジェクトから SDO_GEOMETRY 値を設定します。SE_SHAPE オブジェクトには、標高、メジャー、CAD データ、アノテーション、サーフェス パッチを含め、シンプル ジオメトリとコンプレックス ジオメトリを追加することができます。SDO_GEOMETRY データ タイプはこれらのジオメトリック プロパティの一部をサポートしています。SDO_GEOMETRY と SE_SHAPE オブジェクトのコンポーネントは 1 対 1 で対応していないため、ArcGIS はデータを Oracle Spatial テーブルに格納するときに、一連のルールに従います。

  • ジオメトリのエンティティ タイプに基づいて、4 桁の SDO_GTYPE を作成します。
  • SDO_SRID タイプの設定
  • 座標値を適切な座標参照系で書き出します。
  • X、Y、Z、M の順に座標を書き出します。標高とメジャーを定義するのは、それらがソース SE_SHAPE オブジェクトに含まれている場合だけです。
  • ソース SE_SHAPE オブジェクトに標高またはメジャーが含まれている場合は、すべての座標とともに標高またはメジャーを格納します。
  • ジオメトリの特定の座標に未定義の標高またはメジャー値が含まれている場合は、標高とメジャーを NaN (Not a Number) に設定します。
  • メジャー値は、ラインストリングだけでなく、すべてのジオメトリ タイプを許可します。最初と最後の座標にメジャー値が含まれていることを必要としません。
  • メジャー値を昇順または降順に制限しません。
  • 円弧を SDO_GEOMETRY タイプに書き込みます。
  • 円弧以外の曲線 (3 次スプラインやベジェなど) を直線エッジのラインストリングに変換し、その曲線表現を SE_ANNO_CAD_DATA に格納します。
  • すべてのフィーチャを整合チェックしてから、データベースに書き出します。
  • SDO_GEOMETRY オブジェクトにシングルパートの x、y または x、y、z を格納する場合は、SDO_POINT を使用します。他のタイプのポイント フィーチャクラスでは、ポイント頂点を SDO_ORDINATE_ARRAY に格納します。
メモ:

ArcGIS では SDO_GEOMETRY オブジェクトに種類の異なるジオメトリを追加することはできません。また、ArcGIS は SDO_GEOMETRY オブジェクトに SDO_ETYPE が 0 のエレメントをエンコードしません。SDO_ETYPE が 0 のエレメントは、アプリケーション固有のエレメントです。

CAD およびアノテーション プロパティを格納する場合は、追加の列がビジネス テーブルに追加されます。

SDO_GEOMETRY タイプでは、ArcGIS 格納でサポートしなければならないすべてのタイプのジオメトリック エレメントを格納することができません。ArcGIS がフィーチャクラスを作成または登録するときに、SE_ANNO_CAD_DATA という名前の列がビジネス テーブルに追加されます。このトピックの最初のセクションにあるフィーチャクラスの例の場合、ビジネス テーブルには次の列が含まれます。

名前データ タイプNULL?

NAME

VARCHAR2(32)*

POPULATION

NUMBER(11)

SHAPE

MDSYS.SDO_GEOMETRY

SE_ANNO_CAD_DATA

BLOB

OBJECTID

NUMBER(38)

NOT NULL

メモ:

*Unicode 文字列を使用する場合は VARCHAR2(32) ではなく NVARCHAR2(32) が使用されます。

ArcGIS はデータ ソースに CAD データが含まれていることを検出すると、CAD データのシンプル ジオメトリ表現を SDO_GEOMETRY 値に書き込み、変更していない CAD データを SE_ANNO_CAD_DATA 値に書き込みます。SE_ANNO_CAD_DATA プロパティには、さまざまな ArcGIS コンポーネントのデータが含まれます。

  • ArcMap からの 3 次スプラインやベジェ曲線などのパラメトリック オブジェクト
  • ArcGIS Spatial Analyst エクステンション からのサーフェス パッチ

Oracle Spatial フィルター関数を使用してフィーチャクラスで空間検索が実行されます。

ArcGIS は Oracle Spatial の SDO_FILTER 関数を使用して、1 次空間検索を実行します。ArcGIS はアプリケーションが要求する空間リレーションシップに基づいて、SDO_GEOMETRY の 2 次空間検索を実行します。

アプリケーションが ArcGIS に指定する SQL WHERE 句には、Oracle Spatial の 1 次フィルター関数と 2 次フィルター関数が含まれていることがあります。アプリケーションは WHERE 句に空間フィルターを使用することで、空間検索をデータベース サーバーおよびアプリケーションそのものに分散させることができます。