データベース データと ArcGIS

ArcGIS では、データ ソースに接続する際に特定のルールが適用されます。ArcGIS がデータベースに接続してデータベース内のデータを読み取る場合には、次のルールが適用されます。

オブジェクト名

データベース管理システムにおいて、オブジェクト名に使用できる文字の定義はさまざまです。ほとんどの名前は文字から始まる必要があり、スペース、バックスラッシュ文字、データベース管理システムの予約済みキーワードは使用できません。一部のデータベースは、スラッシュ (/)、アンダースコア (_)、ドル記号 ($)、ダッシュ (-)、ドット (.)、あるいは大文字/小文字の混在などの特殊な文字を使用できます。また、オブジェクト名を二重引用符などの区切り文字で囲むことで、特殊文字、予約済みキーワード、大文字/小文字の混在が使用可能になる場合もあります。

しかし、ArcGIS では、オブジェクト名を区切ることができません。ArcGIS で使用する場合には、区切り文字が必要なテーブル、フィーチャクラス、インデックス、データベース、ユーザー*、ロール、その他のオブジェクト名を作成しないでください。この場合、オブジェクトはデータベース内に作成されますが、ArcGIS からアクセスできなくなります。

*特殊文字を含む Microsoft SQL Server のユーザー名は、Active Directory グループおよび Windows 認証ログインを完全にサポートするために区切られますが、ArcGIS は、単一引用符またはアポストロフィを含むユーザー名をサポートしていません。

名前の長さ

ArcGIS は、テーブル、ビュー、ユーザーなどのデータベース オブジェクトを読み取り、(場合によっては) 作成することができます。ArcGIS において、これらのオブジェクトの名前で許可されている最大長と、例外 (該当する場合) を次の表に示します。

メモ:

データベースで使用できる文字数が ArcGIS より少ない場合は、データベースで使用できる文字数に制限されます。オブジェクト名の制限については、使用するデータベース管理システムのドキュメントをご参照ください。

リスト表示されている文字数は、1 バイト文字セットの使用を想定しています。

オブジェクト タイプArcGIS が作成する最大文字数ArcGIS で読み取られる最大文字数例外

データベース名

なし

31

ArcGIS は、Oracle で許可されている最大データベース名を読み取ることができます。

データベース名の値は SAP HANA には適用されません。

テーブル、フィーチャクラス、またはビュー名

128

128

インデックス名

SQL Server 以外のすべてのデータベースでは 16。SQL Server では最大 128 文字のインデックス名を作成可能。

ArcGIS 以外で作成されたインデックスの場合は、データベース上限まで。

インデックス名は SAP HANA には適用されません。

フィールド (列) 名

SQL ServerPostgreSQLSAP HANATeradata で作成する場合は 31。

Db2Oracle で作成する場合は 30。

PostgreSQL から読み取る場合は 31。

Db2Oracle 12.1 以前のリリースから読み取る場合は 30。

その他のサポートされているデータベースについては、データベース上限まで。

ユーザー名

ArcGIS は、次のデータベースにのみユーザーを作成します。許可されているユーザー名の最大長を示します。

  • Oracle - 12.1 以前のリリースについては 30、12.2 以降のリリースは 31
  • PostgreSQL - 31
  • SAP HANA - 31
  • SQL Server - 128

接続の方法によって異なる。[データベース接続] ダイアログ ボックスでは 31 文字まで許可。[データベース コネクションの作成 (Create Database Connection)] ジオプロセシング ツールでは、データベース上限まで許可。

ユーザー名の値は SQLite には適用されません。

パスワード

ArcGIS は、次のデータベースのユーザーにのみパスワードを作成します。許可されているパスワードの最大長を示します。

  • Oracle - 30
  • PostgreSQL - 75
  • SAP HANA - 31
  • SQL Server - 128

Teradata 以外のすべてのサポートされているデータベースは 256。Teradata では 31 文字まで許可。

パスワードの値は SQLite には適用されません。

ジオメトリの整合チェック

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 つのホールとして扱われます。

    2 つのホールが 1 つのポイントを共有するポリゴンの頂点の方向

    この例の場合、共通のポイント g を共有するため、2 つの内部のエリアは 1 つのホールです。

  • ポリゴンとホールを含むポリゴンを組み合わせると、次の図に示すようにかなり複雑な形になることがあります。外側の境界は島のある湖です。島には小さな湖があります。

    ネストしたポリゴン

    これらのポリゴンは、1 つ、2 つ、または 3 つのフィーチャとして表現することができます。各ポリゴンを別々のフィーチャとして格納してもかまいません。大きな湖はドーナツ ポリゴンです。大きな湖の境界は外側の境界で、島は 1 つのドーナツ ホールの境界です。島もドーナツ ポリゴンです。島の境界は外側の境界で、小さな湖はホールです。小さな湖は 1 つのポリゴンです。

    湖が重要なフィーチャである場合は、ホールを含む 1 つのフィーチャで大きな湖を表し、2 つ目のシェープで小さな湖を表します。また、マルチパート ポリゴンを使用してフィーチャを表すこともできます。最初のポリゴン パートは、島を表すドーナツ ホールを含む大きな湖です。2 つ目のパートは小さな湖です。

  • nil ジオメトリも有効であり、プレースホルダーとしての役割を果たします。このジオメトリには、対応するジオメトリのない属性行を設定できます。nil ジオメトリが生成される例として、交差していない 2 つのポリゴンの交差部分を求めるリクエストがあります。

    ポリゴンが交差していないと、nil ジオメトリが返される

    エリア A とエリア B は接していないため、交差部分を求めるクエリの結果、空のジオメトリが返されます。

  • フィーチャには次元があります。X,Y 座標しかないフィーチャは 2 次元と見なされます。Z 座標またはメジャー値を含むフィーチャは 3 次元と見なされます。nil メジャー値を含むフィーチャを生成することもできます。

空間メタデータ

ジオデータベースには、そのデータベースに含まれる空間データに関するメタデータが格納されます。ArcGIS クライアントは、フィーチャクラスのエンティティ タイプ (ポイント、ライン、ポリゴンなど)、次元 (X,Y,Z、および M 座標)、空間参照、一意の ID、フィーチャクラス範囲に関する情報をジオデータベース システム テーブルから読み取ることができます。ArcGIS がデータベース内のフィーチャクラスに接続している場合は、これと同じテーブルを使用できません。このため、ArcGIS は外部のソースからこれらの情報を入手しなければなりません。

フィーチャクラス (空間テーブル) を ArcGIS Pro のマップにドラッグすると、クエリ レイヤーが作成されます。クエリ レイヤーを定義するために、ArcGIS Pro で次の処理が実行されます。

  1. 次元、空間参照、ジオメトリ タイプなどの空間テーブル情報について、データベースに問い合わせします。
  2. 情報全体がテーブルに定義されていない場合、ArcGIS Pro はテーブル内の最初の行を読み取り、そのフィーチャからの情報を使用します。
  3. 最初の行を参照しても空間参照、ジオメトリ タイプ、次元が判定できない場合、たとえば、テーブルにデータが含まれていなかったり、行でカスタム空間参照が使用されていたりする場合は、レイヤー定義に使用するために、この情報を入力するよう求められます。
  4. ArcGIS Pro はデータベースを検索し、特定のテーブルの行に対して一意の ID (ObjectID) として使用できる NULL でない列を検索します。該当する行が見つからない場合、テーブルの ObjectID を定義するように求められます
  5. 最後に、レイヤーをマップに追加すると、ArcGIS Pro でそのレイヤーの範囲が算出されます。

マップに表示される内容はクエリに基づいているため、クエリ レイヤー定義を開いて、その内容を変更することができます。たとえば、フィーチャクラスにポイントとポリゴンが含まれる場合、クエリ レイヤー定義を開いて、表示するジオメトリ タイプを選択できます。同様に、フィーチャクラスに複数の空間列が含まれる場合、クエリ レイヤー定義を開いて、代わりに別の空間列を含めるようにクエリを変更することができます。ただし、クエリを変更しても、サポートされていないデータ タイプを表示することができない点に注意してください。