[新しいクエリ レイヤー] ダイアログ ボックスを使用し、SQL クエリを作成して、マップのクエリ レイヤーを定義します。
次に、[新しいクエリ レイヤー] ダイアログ ボックスを使用してクエリ レイヤーを作成する方法をまとめます。
- データベースへの接続
ArcGIS でクエリ レイヤーを作成する最初の手順として、検索するデータベースへの接続を確立しておく必要があります。「ArcMap でのデータベース コネクション」で説明するように、[カタログ] ツリーにデータベース接続を作成できますが、それ以外にも [新しいクエリ レイヤー] ダイアログ ボックスから接続を作成することもできます。
- テーブルを選択します。
データベースへの接続が確立されると、そのデータベースにあるテーブルとビューのリストが [新しいクエリ レイヤー] ダイアログ ボックスに表示されます。テーブルを 1 つ選択すると、そのテーブルの各列が表示されます。
データベースの各列にはそれぞれデータ タイプが設定されています。ArcGIS では、ほとんどの一般的なデータベース タイプを使用できます。ただし、一部のデータベース タイプはサポートされていません。属性列のタイプに「不明」と表示されている場合は、ArcGIS がサポートしていないデータ タイプであることを示します。クエリを指定するときには、データ タイプが不明の列をすべて除外するか、ArcGIS でサポートされているデータ タイプにクエリで変更する必要があります。
詳細については、「ArcGIS でサポートされている DBMS のデータ タイプ」をご参照ください。
- SQL クエリを定義します。
[クエリ] テキスト ボックスに SQL クエリを指定します。
クエリの構築にあたって [クエリ] テキスト ボックスにテーブル全体を追加する場合は、テーブルをダブルクリックするか、[テーブルの一覧] ウィンドウのテーブルを [クエリ] テキスト ボックス内にドラッグします。同様に、テーブル内の特定の列をクエリに追加する場合は、該当する列をダブルクリックするか、[列] ウィンドウから列を [クエリ] テキスト ボックス内にドラッグします。また、特定のクエリを入力することも、外部アプリケーションのクエリをコピーして [クエリ] テキスト ボックスに貼り付けることもできます。
クエリ レイヤーを構築するときは、そのデータベースに固有の SQL 構文を使用する必要があります。一般的な SQL 文は、SELECT * FROM Test.myuser.US_States のようになります。この場合は、US_States テーブルのすべての列が含まれたクエリ レイヤーが作成されます。マップでは、アメリカ合衆国全体が表示されます。
SQL クエリの構築の詳細については、「クエリ式の構築」をご参照ください。
- SQL ステートメントを検証します。
クエリを作成したら、その整合性をチェックする必要があります。整合チェック中に、ArcGIS はテーブルに返された最初の行に基づいてクエリ レイヤーのプロパティを決定します。
整合チェック中に、ArcGIS はテーブルに返された最初の行に基づいてクエリ レイヤーのプロパティを決定します。
クエリ レイヤーのプロパティは、データベースから ArcGIS に返された行をフィルター処理するために使用されます。たとえば、フィーチャクラスのフィーチャが異なる SRID を使用している場合は、クエリ レイヤーに設定した SRID プロパティを使用して、その SRID に一致しないデータベース テーブルの行をマップで表示しないようにすることができます。
- 一意識別子を指定するか、整合チェック時に ArcGIS で見つかった識別子を使用します。
一意識別子とは、ArcGIS でテーブル内の各行を識別するために使用される 1 つまたは複数のフィールドです。
- 空間列を含むフィーチャクラスまたはビューの場合、以下を定義するか、整合チェック時に ArcGIS が検出したデフォルト値を使用します。
- 次元 - レイヤーの座標に、ルート データを格納するための M 値と 3D データを格納するための Z 値が含まれるかどうかを決定します。
- ジオメトリ タイプ - レイヤーがポイント、マルチポイント、ライン、またはポリゴン フィーチャのどれを格納するかを決定します。
- 空間参照 - レイヤーの座標系とその他の関連空間プロパティを表します。
データベース内のフィーチャに設定された現在の SRID 値に基づいて、空間参照を正確に確定できない場合があります。その場合は、クエリ レイヤーの空間参照は不明になるため、手動で定義する必要があります。クエリ レイヤーの空間参照を定義しても、データは再投影されず、ArcGIS 内でのクエリ結果をマッピングするときに使用する空間参照を定義しているだけであるという点に注意してください。
- SRID - レイヤーの空間参照 ID を表し、クエリで空間参照 ID が同じジオメトリだけを返すために使用されます。クエリ レイヤーが空間フィールドを持たない場合は、SRID 値はブランクです。値が設定されている場合、指定したジオメトリ SRID 値を持たないフィーチャはすべて結果セットから除外されます。
マップ内にクエリ レイヤーを作成するには、次の手順に従います。
- [新しいクエリ レイヤー] ダイアログ ボックスの [名前] テキスト ボックスに、作成するクエリ レイヤーの名前を指定します。この名前が ArcMap のコンテンツ ウィンドウに表示されます。
- [接続] をクリックし、クエリするテーブルを含むデータベースに接続します。
[接続の管理] ダイアログ ボックスが開きます。ここから、既存のデータベース接続を選択したり、接続を作成したり、既存の接続を編集または削除したりできます。
- 既存の接続を選択するか、データベースへの接続を作成します。
- データベース接続を作成するには、[新規作成] をクリックします。[データベース接続] ダイアログ ボックスが表示されます。「ArcMap でのデータベース接続」で説明されているように、接続情報を指定します。新しい接続が [既存の接続] リストに追加されたら、その接続を説明する名前を入力して [OK] をクリックします。
- 既存の接続を使用するには、[既存の接続] リストから選択して [OK] をクリックします。
- [クエリ] テキスト ボックスに SQL クエリを入力します。
- [整合チェック] をクリックすると、クエリの構文が正しく、ArcGIS で利用できるデータを返すものであるか確認できます。整合チェック プロセスでは、データベースに対してクエリを実行し、クエリから返される結果セットが ArcGIS のデータ モデリング標準に従っているかどうかが確認されます。クエリ レイヤーは、レイヤー定義の整合性が確認されるまでマップに追加されません。
整合チェック ルールとして、次を満たしていることが確認されます。
- 結果セットの持つ空間フィールドは 1 つだけである。
- 結果セットが持つ空間参照は 1 つだけである。
- 結果セットが持つシェープ タイプは 1 つだけである。
- 結果セットに、ArcGIS のサポートしないフィールド タイプは含まれていない。
何らかの理由で整合チェックに失敗した場合は、エラー メッセージが返されるので、SQL クエリを修正する必要があります。
整合チェックは、対象のデータが ArcGIS と同じ標準を使用しない空間データベース内のデータである場合に特に重要になります。
整合チェック処理時に、ArcGIS はクエリ レイヤーの次元、ジオメトリ タイプ、空間参照、SRID、および一意識別子のプロパティを設定します。これらの値は、クエリで返される先頭行に基づいています。これらの設定を変更する必要がある場合は、[高度な表示を設定] チェックボックスをオンにして [高度なオプション] ダイアログ ボックスを表示し、次の設定を行います。
- レイヤーの各行を一意に識別する値を含むフィールド (複数可) を選択します。詳細については、「一意識別子フィールド」をご参照ください。
- ドロップダウン メニューからジオメトリ タイプを選択します。選択したジオメトリ タイプのフィーチャのみが、クエリの結果セットに表示されます。
- [選択] をクリックして空間参照で使用する座標系を選択するか、[インポート] をクリックして既存のデータセットから空間参照をインポートします。
- クエリが正常に整合チェックされ、必要に応じて高度なオプションを設定したら、[完了] をクリックし、結果セットをクエリ レイヤーとしてマップに追加します。
クエリ レイヤー プロパティの変更について詳しくは、「クエリ レイヤーの変更」をご参照ください。