geo_inside

GeoJSON境界ジオメトリ内のジオメトリを特定します。
boolean geo_inside(any*, any*)
  • 最初のパラメータany*には、任意のジオメトリ・オブジェクトを指定できます。
  • 2番目のパラメータany*はポリゴンである必要があります。

この関数は、最初のパラメータが指すジオメトリが、2番目のパラメータが指すポリゴン内に完全に含まれているかどうかを判断します。

2つのパラメータのいずれかが単一の有効なジオメトリ・オブジェクトを返さず、そのことがコンパイル時に検出された場合は、エラーが発生します。

実行時の動作は次のとおりです。
  • いずれかのパラメータが0個または複数の項目を返した場合はfalseを返します。
  • いずれかのパラメータがNULLを返した場合はNULLを返します。
  • いずれかのパラメータ(実行時)が有効なジオメトリ・オブジェクトではない項目を返した場合は、falseを返します。
  • 2番目のパラメータがポリゴンではないジオメトリ・オブジェクトを返した場合は、falseを返します。
  • 両方のパラメータがそれぞれ1つのジオメトリ・オブジェクトを返し、2番目のジオメトリがポリゴンである場合。
    • 最初のジオメトリが2番目のポリゴンの内部に完全に含まれている場合、つまり、そのすべてのポイントがポリゴンの内部に属している場合は、trueを返します。
    • それ以外の場合はfalseを返します。

ノート:

ポリゴンの内部とは、ポリゴンの境界を定義する線形リング上のポイントを除く、ポリゴン領域内のすべてのポイントです。
例: 北カリフォルニアの自然公園を検索します。
SELECT t.poi.name AS park_name, 
t.poi.address.street AS park_location
FROM PointsOfInterest t
WHERE t.poi.kind = "nature park"
AND geo_inside(t.poi.location,
              { "type" : "polygon",
                "coordinates": [[
                  [-120.1135253906249, 36.99816565700228],
                  [-119.0972900390625, 37.391981943533544],
                  [-119.2840576171875, 37.97451499202459],
                  [-120.2069091796874, 38.035112420612975],
                  [-122.3822021484375, 37.74031329210266],
                  [-122.2283935546875, 37.15156050223665],
                  [-121.5362548828124, 36.85325222344018],
                  [-120.1135253906249, 36.99816565700228]
                ]]
             });
説明:
  • PointsOfInterest表を問い合せて、nature parkの行をフィルタします。
  • geo_inside関数の2番目のパラメータとしてポリゴンを指定します。
  • 指定したポリゴンの座標は、米国カリフォルニア州の北部の座標に対応しています。
  • geo_inside関数は、自然公園の場所が指定された場所のポイント内に完全に含まれている場合にのみ行を返します。
結果:
{"park_name":"portola redwoods state park",
"park_location":"15000 Skyline Blvd"}