SQL と空間検索

SQL 機能の一部として空間検索を実行することができます。空間検索は、SQL ダイアログで選択されたオプションによって暗黙的に実行することも、作成したクエリーの SPATIAL キーワードを使用して明示的に実行することもできます。

暗黙的な空間検索

暗黙的な空間検索は、SQL ダイアログ内で完全に定義され、以下に説明するように、任意の 2 つのネットワーク レイヤー間、またはネットワーク レイヤーと GIS レイヤーの間で実行できます。

  1. [検索タイプ] を選択します。
    • 交差: レイヤーのラインまたはポリゴン面積と交差するネットワーク オブジェクトを検索します。
    • 内部: レイヤー ポリゴンの内側にあるネットワーク オブジェクトを検索します。
    • 内包: ポリゴンの内側にレイヤー オブジェクトがあるネットワーク ポリゴンを検索します。
    • 距離: レイヤーのポイント、ライン、またはポリゴンの検索距離内にあるネットワーク オブジェクトを検索します。
    • 最近: 指定した距離内にある最も近いネットワーク オブジェクトを検索します。指定した距離内に複数のオブジェクトがある場合は、最初に見つかったものが結果として返されます。
  2. [レイヤー タイプ] を選択します。
    • ネットワーク レイヤー: 現在のネットワークのオブジェクト レイヤー
    • GIS レイヤー: ジオプランでネットワークの背後に表示される GIS 背景レイヤー
  3. [レイヤー] ボックスでレイヤーを選択します。
    注: GIS レイヤーを使用して検索する場合は、レイヤーをジオプラン ビューに読み込む必要があります。
    注: クエリーでは、レイヤーは gislayer として参照されます(レイヤー タイプとしてネットワークを使用している場合でも)。
  4. 必要に応じて、 [距離] の値を定義します。
    重要: 距離の値は、 [距離] または [最近] のいずれかの検索タイプを使用している場合にのみ必要であり、使用されます。

空間レイヤー検索にフィールドを含めるには、[フィールド]ボックスでフィールドを選択するか、以下に示す構文を使用して編集ボックスに直接入力します。フィールド名は、gislayer.<field_name> 構文を使用してクエリーに含められます。

注: クエリーで空間フィールドを使用する方法は、ネットワーク オブジェクト フィールドとまったく同じです。

このタイプのクエリーの例を以下に示します。これは、「SQL の例: 重要な管」ヘルプ トピックに記載されています。

演算のシーケンス

クエリーで空間検索選択オプションとオブジェクト タイプ選択オプションの両方が定義されている場合、空間検索が最初に実行されます。次に、空間検索の結果に対して、オブジェクト タイプ基準を使用したメイン クエリーが実行されます。例:

SQL query context:
  • オブジェクト タイプ:
  • [空間] 検索タイプ: 交差
  • [空間] レイヤー タイプ: GIS レイヤー
  • [空間] レイヤー: [SHP]道路


diameter > 200

このクエリーでは、次の処理が行われます。

  1. レイヤー '[SHP]道路' の道路と交差するすべての管が検索されます。
  2. 手順 1 で検出された管を使用して、直径が 200 を超える管を選択します。

例 1

SQL query context:
  • オブジェクト タイプ:
  • [空間] 検索タイプ: 距離
  • [空間] レイヤー タイプ: GIS レイヤー
  • [空間] レイヤー: [SHP]道路
  • [空間] 距離: 2.0


diameter > 200

GIS データを使用して、道路から 2 メートル以内にある、直径が 200 を超えるすべての管を検索します。

例 2

SQL query context:
  • オブジェクト タイプ: すべてのノード
  • [空間] 検索タイプ: 内部
  • [空間] レイヤー タイプ: ネットワーク レイヤー
  • [空間] レイヤー: ポリゴン


z < 100 AND gislayer.area > 150

面積が 150 を超えるポリゴン内にある、高度が 100 未満のすべてのノードを選択します。

SPATIAL キーワードを使用した明示的な空間検索

空間検索に SPATIAL キーワードを使用する主な利点は、SQL ブロック内で空間検索を使用する行と使用しない行を混在させられることです。

SPATIAL キーワードを使用して明示的な空間検索を実行するには、検索の対象となるクエリーのオブジェクト テーブルを定義する必要もあります。これは、単純な SELECT 句を使用して行います。これらは次の順序で記述します。

  1. SPATIAL クエリー ブロック
  2. SELECT クエリー ブロック
重要: SPATIAL 句と SELECT 句は個別のクエリー ブロックとして定義され、単一のブロックとして動作する場合でも、(クエリー ブロックを区切るための一般的な処理と同様に)セミコロン ";" で区切る必要があります。

クエリーで空間検索を使用するための構文は、次のとおりです。

SPATIAL 
  <geometry type> 
  <layer type> 
  <layer name>;
SELECT
 FROM <object type>;
SPATIAL 
  <geometry type> 
  <layer type> 
  <layer name> 
  <distance>;
SELECT
 FROM <object type>;
SPATIAL 構文関数 構文オプション 説明
ジオメトリ タイプ 交差 レイヤーのラインまたはポリゴン面積と交差するネットワーク オブジェクトを検索します。
内側 レイヤー ポリゴンの内側にあるネットワーク オブジェクトを検索します。
中身 ポリゴンの内側にレイヤー オブジェクトがあるネットワーク ポリゴンを検索します。
距離 レイヤーのポイント、ライン、またはポリゴンの検索距離内にあるネットワーク オブジェクトを検索します。
近接点 指定した距離内にある最も近いネットワーク オブジェクトを検索します。指定した距離内に複数のオブジェクトがある場合は、最初に見つかったものが結果として返されます。
レイヤー タイプ ネットワーク 現在のネットワークのオブジェクト レイヤー
GIS ジオプランでネットワークの背後に表示される GIS 背景レイヤー
画層名 GIS レイヤーの場合は引用符で囲まれた文字列、ネットワーク オブジェクトの場合はテーブル名(引用符で囲みません。スペースなしの単一の単語の場合は任意で[ ]で囲み、そうでない場合は必ず[ ]で囲みます)にする必要があります。
距離
重要: [距離] の値は、 [距離] または [最近] ジオメトリ タイプを使用している場合にのみ必要であり、使用されます。
ヒント: [距離] フィールドの入力値には、数値定数またはスカラー変数を指定できます。

SPATIAL キーワードの使用ルール

  1. 標準クエリーと同様に、空間クエリーでも[SQL]ダイアログの優先度ルールが適用されます。つまり、コンボ ボックスとテキスト ボックスで指定されたオプションは、SPATIAL ステートメントによって変更されるまでは、初期空間設定として機能します。例:
    SQL query context:
    • オブジェクト タイプ: すべてのノード
    • [空間] 検索タイプ: 内部
    • [空間] レイヤー タイプ: ネットワーク レイヤー
    • [空間] レイヤー: ポリゴン


    SPATIAL
      Distance
      Network
      Reservoir
      30.5;
    SELECT
     FROM [All Nodes]

    このクエリーは、まず、ネットワーク ポリゴン内にあるすべてのノードを選択してから、貯水池オブジェクトの 30.5 距離単位内にあるすべてのノードを選択します。

  2. すべての SPATIAL 句は、それを含むブロックの最後までのみ有効です。つまり、次のようになります。
    • IFELSE、または ELSEIF ブロック内にある場合は、そのブロックの最後で無効になります。
    • WHILE ブロック内にある場合は、そのブロックの最後で無効になります。
    • 既存のブロック内に含まれるネストされた IF / WHILE ブロック内では、有効なままになります。

クエリーからの空間検索の除外

次の構文を使用して、クエリーのセグメントから空間検索を除外することもできます。

SPATIAL NONE;

SPATIAL NONE がクエリーにブロックとして追加されると、クエリーの残りの部分では有効だった SPATIAL 句(暗黙的または明示的を問わない)がキャンセルまたは無効化されます。つまり、SQL 句は通常の意味を持ち、空間検索を参照することなく、ネットワーク内のデータに対して作用します。必要に応じて、クエリーで SPATIAL NONE ブロックの後に SPATIAL 句を追加して、新しい空間検索句を導入することができます。

こうすると、SQL ブロック内で空間検索を使用する行と使用しない行を混在させることができるため、柔軟性が向上します。

空間検索タイプとジオメトリ

次の表は、各検索タイプの互換性のあるジオメトリの組み合わせの詳細を示しています。

注:
  • ArcGIS Engine レイヤーおよび ArcGIS Desktop の GIS レイヤーの場合、 [内部] 検索タイプは完全に GIS ポリゴンの内側にあるオブジェクトを検索します。
  • MapXtreme GIS レイヤー、ネットワーク レイヤー、背景ネットワーク レイヤーの場合、 [内部] 検索タイプは重心がポリゴン境界の内側にあるオブジェクトを検索します。
  • [交差] 検索タイプでは、レイヤー ポリゴンの [内部] にあるすべてのオブジェクト、および境界と交差するオブジェクトが検索されます。
  • [内包] 検索タイプでは、レイヤー オブジェクトが完全にネットワーク ポリゴンの内側にあるネットワーク ポリゴンを検索します。
  • [最近] 検索タイプでは、指定された [距離] 内にある最も近いネットワーク オブジェクトが検索されます。指定した距離内に複数のオブジェクトがある場合は、最初に見つかったものが結果として返されます。

空間検索タイプ

検索タイプの説明

互換性のあるジオメトリの組み合わせ

交差

レイヤーのラインまたはポリゴン面積と交差するネットワーク オブジェクトを検索します。

InfoWorks WS Pro ジオメトリ

レイヤー ジオメトリ
線分

線分

ポリゴン

ポリゴン

線分

ポリゴン

内側

レイヤー ポリゴンの内側にあるネットワーク オブジェクトを検索します。

InfoWorks WS Pro ジオメトリ

レイヤー ジオメトリ
ポイント ポリゴン
線分 ポリゴン
ポリゴン ポリゴン

中身

ポリゴンの内側にレイヤー オブジェクトがあるネットワーク ポリゴンを検索します。

InfoWorks WS Pro ジオメトリ

レイヤー ジオメトリ
ポリゴン

ポイント

Line

ポリゴン

距離

レイヤーのポイント、ライン、またはポリゴンの検索距離内にあるネットワーク オブジェクトを検索します。

InfoWorks WS Pro ジオメトリ

レイヤー ジオメトリ
ポイント

ポイント

Line

ポリゴン

線分

ポイント

Line

ポリゴン

ポリゴン

ポイント

Line

ポリゴン

近接点

指定した距離内にある最も近いネットワーク オブジェクトを検索します。指定した距離内に複数のオブジェクトがある場合は、最初に見つかったものが結果として返されます。

InfoWorks WS Pro ジオメトリ

レイヤー ジオメトリ
ポイント

ポイント

Line

ポリゴン

線分

ポイント

Line

ポリゴン

ポリゴン

ポイント

Line

ポリゴン