ArcGIS では、データ ソースに接続する際に特定のルールが適用されます。 ArcGIS がデータベースまたはクラウド データ ウェアハウスに接続してそれらのデータを読み取る場合には、次のルールが適用されます。
オブジェクト名
データベース管理システムおよびクラウド データ ウェアハウス プロバイダーにおいて、オブジェクト名に使用できる文字の定義はさまざまです。 また、データベースでは、オブジェクト名を二重引用符などの区切り文字で囲むことで、サポートされていない文字をオブジェクト名に使用できることもあります。 ただし、ArcGIS では、データベースのクエリ時にオブジェクト名を区切らないため、そのような名前を認識できません。
名前の長さ
ArcGIS は、テーブル、ビュー、ユーザーなどのデータベース オブジェクトを読み取り、(場合によっては) 作成することができます。 ArcGIS において、これらのオブジェクトの名前で許可されている最大長と、例外 (該当する場合) を次の表に示します。
注意:
データベースで使用できる文字数が ArcGIS より少ない場合は、データベースで使用できる文字数に制限されます。 オブジェクト名の制限については、データベース管理システムに関するドキュメントをご参照ください。
リスト表示されている文字数は、1 バイト文字セットの使用を想定しています。
オブジェクト タイプ | ArcGIS が作成する最大文字数* | ArcGIS で読み取られる最大文字数 | 例外 |
---|---|---|---|
データベース名 | SQLite 以外のデータベースでは、該当なし。 SQLite で作成する場合は 250。 | SQLite から読み取る場合は 250。 他のデータベースから読み取る場合は 31。 Amazon Redshift と Snowflake から読み取る場合は 127。 | ArcGIS は、Oracle で許可されている最大データベース名を読み取ることができます。 データベース名の値は SAP HANA には適用されません。 SQLite のデータベース名は、ファイル パス、ファイル名、ファイル拡張子で構成されます。 SQLite データベースが ST_Geometry または SpatiaLite 空間タイプを使用するよう構成されている場合、ファイル拡張子は (.sqlite) です。 SQLite データベースが OGC GeoPackage として構成されている場合、ファイル拡張子は (.gpkg) です。 |
テーブル名、フィーチャクラス名、またはビュー名 | 128 SQLite で作成する場合は 158。 | 128 SQLite から読み取る場合は 158。 Redshift から読み取る場合は 127。 | |
インデックス名 | SQL Server と SQLite 以外のすべてのデータベースでは 16。SQL Server と SQLite では最大 128 文字のインデックス名を作成可能。 | データベース上限まで。 | SAP HANA およびクラウド データ ウェアハウスでは、インデックス名は適用されません。 |
フィールド (列) 名 | SQL Server、PostgreSQL、SAP HANA、Teradata、SQLite で作成する場合は 31。 Db2 と Oracle で作成する場合は 30。 | PostgreSQL と SQLite から読み取る場合は 31。 Db2 から読み取る場合は 30。 Snowflake または Google BigQuery から読み取る場合は 128。 Redshift から読み取る場合は 127。 その他のサポートされているデータベースについては、データベース上限まで。 | |
ユーザー名 | ArcGIS は、次のデータベースにのみユーザーを作成します。 許可されているユーザー名の最大長を示します。
| 接続の方法によって異なる。データベース接続ダイアログ ボックスでは 31 文字まで許可。 [データベース コネクションの作成 (Create Database Connection)] ジオプロセシング ツールでは、データベース上限まで許可。ただし、このツールはデータベースでのみサポート、クラウド データ ウェアハウスでは非サポート。 | ユーザー名の値は SQLite および BigQuery には適用されません。 |
パスワード | ArcGIS は、次のデータベースのユーザーにのみパスワードを作成します。 許可されているパスワードの最大長を示します。
| Teradata と Redshift 以外のすべてのサポートされているデータベースとクラウド データ ウェアハウスでは 256。Teradata では 31 文字まで、Redshift では 64 文字まで許可。 | パスワードの値は SQLite にも BigQuery にも適用されません。 |
*ArcGIS を使用して、クラウド データ ウェアハウスにオブジェクトを作成することはできません。
BigQuery では、サポートされているデフォルトのデータセット名の最大長は 31 文字です。 サポートされているプロジェクト名の最大長は 30 文字です。
ジオメトリの検証
ArcGIS クライアントを使用してデータベース内にデータを作成する場合、ArcGIS では、特定のルールに従ってジオメトリの検証が実行されます。 ArcGIS クライアントで作成したジオメトリが有効でない場合は、そのジオメトリをデータベースに挿入することができません。
Esri と IBM ST_Geometry のコンストラクター関数および ArcGIS API は、フィーチャが作成されたときに、Esri シェープ ライブラリを使用してジオメトリ データを検証します。 したがって、SQL を使用して Esri または IBM ST_Geometry シェープを作成した場合でも、検証ルールが適用されるため、無効なジオメトリはデータベースにコミットされません。
SDO_Geometry、PostGIS ジオメトリまたはジオグラフィ、Microsoft SQL Server ジオメトリまたはジオグラフィなどの他の空間タイプには、独自のコンストラクター関数が存在し、独自のジオメトリ検証ルールが使用されます。 これらのルールは、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 は外部のソースからこれらの情報を入手しなければなりません。
フィーチャクラス (空間テーブル) を ArcGIS Pro でマップにドラッグすると、クエリ レイヤーが作成されます。 クエリ レイヤーを定義するために、ArcGIS Pro で次の処理が実行されます。
- 次元、空間参照、ジオメトリ タイプなどの空間テーブル情報について、データベースに問い合わせします。
- 情報全体がテーブルに定義されていない場合、ArcGIS Pro はテーブル内の最初の行を読み取り、そのフィーチャからの情報を使用します。
- 最初の行を参照しても空間参照、ジオメトリ タイプ、次元が判定できない場合、たとえば、テーブルにデータが含まれていなかったり、行でカスタム空間参照が使用されていたりする場合は、レイヤー定義に使用するために、この情報を入力するよう求められます。
- ArcGIS Pro はデータベースを検索し、特定のテーブル内の行の一意の識別子 (ObjectID) として使用できる NULL 以外の列を検出します。 該当する行が見つからない場合、テーブルの ObjectID を定義するように求められます。
- 最後に、レイヤーをマップに追加すると、ArcGIS Pro でそのレイヤーの範囲が算出されます。
マップに表示される内容はクエリに基づいているため、クエリ レイヤー定義を開いて、その内容を変更することができます。 たとえば、フィーチャクラスにポイントとポリゴンが含まれる場合、クエリ レイヤー定義を開いて、表示するジオメトリ タイプを選択できます。 同様に、フィーチャクラスに複数の空間列が含まれる場合、クエリ レイヤー定義を開いて、代わりに別の空間列を含むようにクエリを変更することができます。 ただし、クエリを変更しても、サポートされていないデータ タイプを表示することができない点に注意してください。