GeoJSONデータの検索

Oracle NoSQL Databaseには、検索ジオメトリと関係があるGeoJSONデータの検索に使用する次の関数が用意されています。
  • boolean geo_intersect(any*, any*)

  • boolean geo_inside(any*, any*)

  • boolean geo_within_distance(any*, any*, double)

  • boolean geo_near(any*, any*, double)

検索関数の他に、さらに2つの関数を使用できます。これらは表の最後の2行に示されています。
関数 詳細
geo_intersect(any*, any*) boolean いずれかのオペランドで単一の有効なGeoJsonオブジェクトが戻されないことが関数で検出された場合、コンパイル時にエラーが発生します。そうでない場合、実行時の動作は次のようになります。
  • いずれかのオペランドが0または複数の項目を戻す場合はfalseを戻します。

  • いずれかのオペランドがNULLを戻す場合は、NULLを戻します。

  • いずれかのオペランドが有効なGeoJsonオブジェクトではない項目を戻す場合は、falseを戻します。

  • 最後に、両方のオペランドが単一のGeoJsonオブジェクトを戻す場合、2つのジオメトリに共通する点があればtrueを戻します。それ以外の場合はfalseを戻します。

geo_inside(any*, any*) boolean いずれかのオペランドで単一の有効なGeoJsonオブジェクトが戻されないことが関数で検出された場合、コンパイル時にエラーが発生します。そうでない場合、実行時の動作は次のようになります。
  • いずれかのオペランドが0または複数の項目を戻す場合はfalseを戻します。

  • いずれかのオペランドがNULLを戻す場合は、NULLを戻します。

  • いずれかのオペランドが有効なGeoJsonオブジェクトではない項目を戻す場合は、falseを戻します。

  • 最後に、両方のオペランドが単一のGeoJsonオブジェクトを戻し、2番目のGeoJsonがポリゴンである場合、最初のジオメトリが2番目のポリゴン内に完全に含まれており、そのすべての点がポリゴンの内側に属していれば、関数はtrueを戻します。ポリゴンの内側とは、ポリゴンの境界を定義する輪になった線の点を除く、ポリゴン内のすべての点です。それ以外の場合はfalseを戻します。
geo_within_distance(any*, any*, double) boolean 最初の2つのオペランドで単一の有効なGeoJsonオブジェクトが戻されないことが関数で検出された場合、コンパイル時にエラーが発生します。そうでない場合、実行時の動作は次のようになります。
  • 最初の2つのオペランドのいずれかが0または複数の項目を戻す場合はfalseを戻します。

  • 最初の2つのオペランドのいずれかがNULLを戻す場合は、NULLを戻します。

  • 最初の2つのオペランドのいずれかが有効なGeoJsonオブジェクトではない項目を戻す場合は、falseを戻します。

  • 最後に、最初の2つのオペランドの両方が単一のGeoJsonオブジェクトを戻す場合、最初のジオメトリが2番目のジオメトリからNメートル以内の距離であれば、関数はtrueを戻します。Nは、3番目のオペランドによって戻される数値です。2つのジオメトリ間の距離は、最初の点が最初のジオメトリに属し、2つ目の点が2つ目のジオメトリに属している任意の点のペア間の距離の中で最短の距離として定義されます。それ以外の場合はfalseを戻します。
geo_near(any*, any*, double) boolean geo_near関数は、内部でgeo_within_distance関数に変換され、2つのジオメトリ間の距離による(暗黙的な)順序付けが行われます。ただし、問合せに(明示的な)順序付けがすでにある場合、この関数で距離による順序付けは行われません。geo_near関数はWHERE句でのみ使用でき、最上位レベルの述語である必要があります。geo_near関数は、ORまたはNOT演算子の下にネストできません。
geo_distance(any*, any*) double オペランドで単一の有効なGeoJsonオブジェクトが戻されないことが関数で検出された場合、コンパイル時にエラーが発生します。そうでない場合、実行時の動作は次のようになります。
  • いずれかのオペランドが0または複数の項目を戻す場合は-1を戻します。

  • いずれかのオペランドがジオメトリでない場合は-1を戻します。

  • いずれかのオペランドがNULLを戻す場合は、NULLを戻します。

  • それ以外の場合、関数は2つの入力ジオメトリ間の測地距離を戻します。戻される距離は、最初の点が最初のジオメトリに属し、2つ目の点が2つ目のジオメトリに属している任意の点のペア間の距離の中で最短の距離です。そのような2つの点間の距離は、それらの点を結ぶ測地線の長さです。
geo_is_geometry(any*) boolean
  • オペランドが0または複数の項目を戻す場合はfalseを戻します。

  • オペランドがNULLを戻す場合は、NULLを戻します。

  • 入力が単一の有効なGeoJsonオブジェクトである場合はtrueを戻します。そうでない場合は、falseを戻します。