ST_Geometry 列を含むテーブルのジオメトリ整合チェック
ジオメトリ整合チェック機能は、st_shapelib(Oracle)および st_geometry ライブラリ経由で、ST_Geometry タイプによって提供されます。テーブルを作成すると、レコードを挿入または更新するときにデータの整合チェックが実行されます。
空間テーブルにデータを挿入する方法は主に 2 つあります。
- アクセス用関数もしくは関数を利用して作成されたアプリケーションを使用
- ArcGIS API もしくは ArcGIS API 使用して作成されたアプリケーションを使用
アクセス用関数は、実装された空間タイプによってそれぞれ定義されるため、ジオメトリ データの整合チェックに使用される方法は異なる場合があります。Esri の ST_Geometry アクセス用関数と ArcGIS API では、Esri シェープ ライブラリを使用してジオメトリ データの整合チェックを実行しています。サードパーティの空間タイプは独自のアクセス用関数を持ち、独自のシェープ検証ルールを使用しています。そのため、SDO_Geometry、PostGIS ジオメトリ、Microsoft SQL Server geometry または geography のような空間タイプのシェープ検証ルールについては、それぞれ Oracle、PostGIS、または SQL Server のマニュアルをご参照ください。
以下のルールは Esri シェープ ライブラリに適用され、それらは Esri API および ST_Geometry アクセス用関数に適用されます。
ポイント シェープの整合性ルール
-
ポイントの面積と長さは 0.0 に設定されます。
-
単一のポイントのエンベロープはポイントの X、Y 値に等しくなります。
- マルチパート ポイント シェープのエンベロープは最小境界ボックスに設定されます。
シンプル ラインまたはラインストリングの整合性ルール
- 連続する重複ポイントは削除されます。
- 各パートは少なくとも 2 つの別個のポイントを持つ必要があります。
- 各パートは自身と交差してはいけません。始点と終点は同じでもかまいませんが、その結果生じるリングはエリア シェープとしては扱われません。
- パートは終点で相互に接触してもかまいません。
- 長さはすべてのパートの合計です。
ラインまたはスパゲッティ ストリングの整合性ルール
- ラインは相互に交差できます。
- 各パートは少なくとも 2 つの別個のポイントを持つ必要があります。
- 連続する重複ポイントは削除されます。
- 長さはすべてのパートの合計です。
エリア シェープの整合性ルールと操作
- 連続する重複ポイントは削除されます。
- ダングルは削除されます。
- 線分は閉じていて(始点と終点の Z 座標も同じである必要があります)、交差しないことが検証されます。
- ホールを持つエリア シェープの場合、ホール全体が外側の境界の内部に存在する必要があります。ArcSDE では、外側の境界の外部にあるホールはすべて削除されます。
- 単一の共通ポイントで外側の境界に接するホールは、エリア シェープの反転部分に変換されます。
- 共通のポイントで接する複数のホールは 1 つのホールにまとめられます。
- マルチパート エリア シェープは重なり合うことができません。ただし、あるポイントで 2 つのパートが接することはかまいません。
- マルチパート エリア シェープは共通の境界を持つことはできません。共通の境界はディゾルブされます。
- 2 つのリングが共通の境界を持つ場合は、1 つのリングにマージされます。
- ドーナツ ポリゴンのすべてのホールの境界も含めて、ジオメトリの全外周が計算され、それがジオメトリの長さとして格納されます。
- 面積が計算されます。
- エンベロープが計算されます。
- エリア シェープのポイントは反時計回りに格納されますが、ArcSDE ソフトウェアではどちら向きでもポイントを返すことができます。時計回りの座標を含むエリア シェープを生成した場合、座標リストが反時計回りになるように並びが変更されます。
この例の場合、始点は a で、正しい座標記述順は a,b,c,d,a です。
- エリア シェープは反転部分を持つことがあります。反転部分とは、エリア シェープの内部にあり外側の境界に接する空の領域です。
- 反転部分を持つエリア シェープは、外側の境界に接する内部のリングを持ちます。これはドーナツ ポリゴンとはみなされません。
- エリア シェープがドーナツ ホールを持つときは、外側の境界が最初にリストに記述されます。ホールのポイントは、外部の境界とは逆向きに格納されます。
次の図では、外側の境界は a,b,c,d,a として記述され、ホールは e,f,g,h,e として記述されます。座標リストには、a,b,c,d,a,e,f,g,h,e として格納されます。
- 2 つのホールが 1 つのポイントで接する場合は、2 つのホールではなく 1 つのホールとして扱われます。
この例の場合、共通のポイント g を共有するため、2 つの内部のエリアは 1 つのホールです。
- エリア シェープとホールを持つエリア シェープとを組み合わせると、次の図に示すようにかなり複雑な形になることがあります。外側の境界は島のある湖です。島には小さな湖があります。
これらのフィーチャは、1 つ、2 つ、または 3 つのシェープとして表現することができます。各フィーチャを別々に格納することもできます。大きな湖はドーナツ ポリゴンです。大きな湖の境界は外側の境界で、島は 1 つのドーナツ ホールの境界です。島もドーナツ ポリゴンです。島の境界は外側の境界で、小さな湖はホールです。小さな湖は 1 つのエリア シェープです。
湖が重要なフィーチャである場合は、ホールを持つ 1 つのシェープで大きな湖を表し、2 つめのシェープで小さな湖を表します。また、マルチパート エリア シェープを使用してフィーチャを表すこともできます。最初のシェープ パートは、島を表すドーナツ ホールを持つ大きな湖です。2 つめのパートは小さな湖です。
- nil シェープはプレースホルダの役割を果たし、これにより、対応するジオメトリを持たない属性行を作成できます。nil シェープが生じる例としては、2 つの交差していないエリアの交差部分を求めるリクエストがあります。
エリア A とエリア B は接していないため、交差部分を求めるクエリの結果、空のジオメトリが返されます。
- シェープは次元を持ちます。XY 座標しか持たないシェープは 2 次元とみなされます。Z 座標またはメジャー値を持つシェープは 3 次元とみなされます。シェープは nil メジャー値を持つこともできます。
空間参照 ID
テーブルが作成された空間参照 ID(SRID)の範囲外となる座標の値を挿入しようとすると、INSERT ステートメントは失敗し、次のようなメッセージが表示されます。
DBMS | エラー メッセージ |
---|---|
Oracle | ERROR at line 1: ORA-20004: Error generating shape from text (-112) ORA-06512: at "SDE.ST_GEOMETRY_SHAPELIB_PKG", line 42 ORA-06512: at "SDE.ST_POLYGON", line 69 ORA-06512: at line 1 |
PostgreSQL | ERROR: ESRI: error generating shape [-112]: |
Informix | SQL Error (-937): Coordinates out of bounds in ST_PolyFromText. |
DB2 | GSE3416N Coordinate out of bounds |