ArcGIS では、データ ソースに接続する際に特定のルールが適用されます。ArcGIS がデータベースに接続してデータベース内のデータを読み取る場合には、次のルールが適用されます。
オブジェクト名
データベース管理システムにおいて、オブジェクト名に使用できる文字の定義はさまざまです。ほとんどの場合、文字から始まる必要があり、スペース、バックスラッシュ文字、データベース管理システムの予約済みキーワードは使用できません。一部の DBMS は、スラッシュ (/)、アンダースコア (_)、ドル記号 ($)、ダッシュ (-)、ドット (.)、あるいは大文字/小文字の混在などの特殊な文字を使用できます。また、データベース管理システムでは、オブジェクト名を二重引用符などの区切り文字で囲むことで、特殊文字、予約済みキーワード、大文字/小文字の混在が使用可能になる場合もあります。
ただし、ArcGIS では、オブジェクト名を区切ることができません。ArcGIS で使用する場合には、区切り文字が必要なテーブル、フィーチャクラス、データベース、ユーザー*、ロール、その他のオブジェクト名を作成しないでください。この場合、オブジェクトはデータベース内に作成されますが、ArcGIS からアクセスできなくなります。
* 特殊文字を含む SQL Server ユーザー名は、Active Directory グループと Windows 認証ログインを完全にサポートするために区切られています。
名前の長さ
ArcGIS は、テーブル、ビュー、ユーザーなどのデータベース オブジェクトを読み取り、(場合によっては) 作成することができます。ArcGIS で許容されているこれらのオブジェクトの名前の最大長を次に示します。
リスト表示されている文字数は、ANSI テキストの使用を想定しています。UTF-8 文字では ANSI 文字の 2 倍以上のバイト数を使用するため、使用できる文字数は減少します。
ALTIBASE | Dameng | Db2 | Informix | Netezza | Oracle | PostgreSQL | SAP HANA | SQL Server | Teradata | |
---|---|---|---|---|---|---|---|---|---|---|
データベース名 | 31 | 31 | 8 | 31 | 31 | 30 | 31 | 31 | 31 | 31 |
フィールド (列) 名 | 31 | 31 | 31 | 31 | 31 | 30 | 31 | 31 | 31 | 31 |
インデックス名 | 40 | 128 | 128 | 128 | なし | 30 | 63 | 127 | 128 | 128 |
パスワード | 22 (Windows 上の ALTIBASE) 16 (Windows 以外のオペレーティング システム上の ALTIBASE) | 31 | 31 | 31 | 31 | 31 | 31 | 127 | 31 | 30 |
テーブル名またはフィーチャクラス名 | 40 | 128 | 128 | 128 | 128 | 30 | 63 | 127 | 128 | 128 |
ユーザー名 | 31 | 31 | 30 | 31 | 31 | 30 | 31 | 31 | 31 | 31 |
ビュー名 | 40 | 128 | 128 | 128 | 128 | 30 | 63 | 127 | 128 | 128 |
ジオメトリの整合チェック
ArcGIS クライアントを使用してデータベース内にデータを作成する場合、ArcGIS では、特定のルールに従ってジオメトリの整合チェックが実行されます。ArcGIS クライアントで作成したジオメトリが有効でない場合は、そのジオメトリをデータベースに挿入することができません。
Esri と IBM ST_Geometry のコンストラクター関数および ArcGIS API は、フィーチャが作成されたときに、Esri シェープ ライブラリを使用してジオメトリ データを整合チェックします。したがって、SQL を使用して Esri または IBM ST_Geometry シェープを作成した場合でも、整合性ルールが適用されるため、無効なジオメトリはデータベースにコミットされません。
SDO_Geometry、PostGIS ジオメトリ、Microsoft SQL Server geometry または geography などの他の空間タイプには、独自のコンストラクター関数が存在し、独自のジオメトリ整合性ルールが適用されます。これらのルールは、ArcGIS で適用されているルールと一致していない場合があります。ArcGIS クライアントでは、データが読み取られた時点でジオメトリの整合チェックが実行されるので、ArcGIS のジオメトリ整合性ルールに違反しているジオメトリは表示されません。ArcGIS の外部で作成されたデータを含むデータベースに接続する場合は、ArcGIS で適用されているルールを十分に把握しておく必要があります。
ポイントに関する整合性ルール
- ポイントの面積と長さは 0.0 です。
- 単一のポイントのエンベロープはポイントの X,Y 値に等しくなります。
- マルチパート ポイントのエンベロープは最小境界ボックスです。
シンプル ラインまたはラインストリングの整合性ルール
- 各パートは少なくとも 2 つの別個のポイントを持つ必要があります。
- 各パートは自身と交差してはいけません。始点と終点は同じでもかまいませんが、その結果として生成されるリングはポリゴンとして扱われません。
- パートは終点で相互に接触してもかまいません。
- 長さはすべてのパートの合計です。
ラインまたはスパゲッティ ストリングの整合性ルール
- ラインは相互に交差できます。
- 各パートは少なくとも 2 つの別個のポイントを持つ必要があります。
- 長さはすべてのパートの合計です。
ポリゴンに関する整合性ルールと操作
- ダングルは無効です。
- ポリゴンを構成するライン セグメントが閉じていて (始点と終点の Z 座標も同じである必要があります)、交差していないことが検証されます。
- ホールを含むポリゴンの場合は、ホール全体が外側の境界内に存在しなければなりません。外側の境界外にあるホールはすべて無効です。
- 単一の共通ポイントで外側の境界に接しているホールは、ポリゴンの反転部分に変換されます。
- 共通のポイントで接する複数のホールは 1 つのホールにまとめられます。
- マルチパート ポリゴン同士を重ね合わせることはできません。ただし、あるポイントで 2 つのパートが接することはかまいません。
- マルチパート ポリゴンが共通の境界を持つことはできません。
- 2 つのリングが共通の境界を持つ場合は、1 つのリングにマージされます。
- ドーナツ ポリゴンのすべてのホールの境界も含めて、ジオメトリの全外周が計算され、それがジオメトリの長さとして格納されます。
- 面積が計算されます。
- エンベロープが計算されます。
- ポリゴンのポイントは反時計回りに格納されますが、ArcGIS クライアントはどちらの方向でもポイントを返すことができます。時計回りの座標を含むポリゴンを生成した場合は、座標が反時計回りになるように ArcGIS で並びが変更されます。
この例の場合、始点は 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 は接していないため、交差部分を求めるクエリの結果、空のジオメトリが返されます。
- フィーチャには次元があります。X,Y 座標しかないフィーチャは 2 次元と見なされます。Z 座標またはメジャー値を含むフィーチャは 3 次元と見なされます。nil メジャー値を含むフィーチャを生成することもできます。
空間メタデータ
ジオデータベースには、そのデータベースに含まれる空間データに関するメタデータが格納されます。ArcGIS クライアントは、フィーチャクラスのエンティティ タイプ (ポイント、ライン、ポリゴンなど)、次元 (X,Y,Z、および M 座標)、空間参照、一意の ID、フィーチャクラス範囲に関する情報をジオデータベース システム テーブルから読み取ることができます。ArcGIS がデータベース内のフィーチャクラスに接続している場合は、これと同じテーブルを使用できません。このため、ArcGIS は外部のソースからこれらの情報を入手しなければなりません。
フィーチャクラス (空間テーブル) を ArcMap にドラッグすると、クエリ レイヤーが作成されます。クエリ レイヤーを定義するために、ArcMap で次の処理が実行されます。
- 次元、空間参照、ジオメトリ タイプなどの空間テーブル情報について、データベースに問い合わせします。
- 情報全体がテーブルに定義されていない場合、ArcMap はテーブル内の最初の行を読み取り、そのフィーチャからの情報を使用します。
- 最初の行を参照しても空間参照、ジオメトリ タイプ、次元が判定できない場合、たとえば、テーブルにデータが含まれていなかったり、行でカスタム空間参照が使用されていたりする場合は、レイヤー定義に使用するために、この情報を入力するよう求められます。
- ArcMap はデータベースを検索し、特定のテーブルの行に対して一意の ID (ObjectID) として使用できる NULL でない列を検索します。該当する行が見つからない場合、テーブルの ObjectID を定義するように求められます。
- 最後に、レイヤーをマップに追加すると、ArcMap でそのレイヤーの範囲が算出されます。
マップに表示される内容はクエリに基づいているため、クエリ レイヤー定義を開いて、その内容を変更することができます。たとえば、フィーチャクラスにポイントとポリゴンが含まれる場合、クエリ レイヤー定義を開いて、表示するジオメトリ タイプを選択できます。同様に、フィーチャクラスに複数の空間列が含まれる場合、クエリ レイヤー定義を開いて、代わりに別の空間列を含めるようにクエリを変更することができます。ただし、クエリを変更しても、サポートされていないデータ タイプを表示することができない点に注意してください。