geo_intersect

GeoJSONジオメトリと交差するジオメトリを特定します。
boolean geo_intersect(any*, any*)

1番目と2番目のパラメータany*には、任意のジオメトリ・オブジェクトを指定できます。

この関数は、パラメータとして指定された2つのジオメトリに共通するポイントがあるかどうかを判断します。2つのパラメータのいずれかが単一の有効なジオメトリ・オブジェクトを返さず、そのことがコンパイル時に検出された場合は、エラーが発生します。

実行時の動作は次のとおりです。
  • いずれかのパラメータが0個または複数の項目を返した場合はfalseを返します。
  • いずれかのパラメータがNULLを返した場合はNULLを返します。
  • いずれかのパラメータ(実行時)が有効なジオメトリ・オブジェクトではない項目を返した場合は、falseを返します。

両方のパラメータがそれぞれ単一のジオメトリ・オブジェクトを返す場合、2つのジオメトリに共通するポイントがあればtrueを返し、そうでない場合はfalseを返します。

例: テキサスでは、地下水供給へのアクセスの規制を検討しています。帯水層は、水を含む透水層、岩盤の割れ目または未固結の物質からなる地下層です。政府は、帯水層に非常に近い場所に新たな規制を課す必要があります。

帯水層の座標はすでにマップされています。影響を受ける各郡の郡政府に新しい規制の協議に参加するよう通知できるように、その帯水層と交差するテキサス州のすべての郡を識別する必要があります。
SELECT t.poi.county AS County_needs_regulation,
t.poi.contact AS Contact_phone
FROM PointsOfInterest t WHERE
geo_intersect(
    t.poi.location,
    { 

     "type" : "polygon",
      "coordinates": [
          [
            [-97.668457031249, 29.34387539941801],
            [-95.207519531258, 29.19053283229458],
            [-92.900390625653, 30.37287518811801],
            [-94.636230468752, 32.21280106801518],
            [-97.778320312522, 32.45415593941475],
            [-99.799804687541, 31.18460913574325],
            [-97.668457031249, 29.34387539941801]
          ]
        ]
    }
);
説明:
  • 前述の問合せでは、帯水層の場所と交差する場所をフェッチしています。つまり、その場所の座標に帯水層の場所と共通するポイントがある場合です。
  • geo_intersectを使用して、場所の座標に、指定された帯水層の座標と共通するポイントがあるかどうかを確認します。
結果:
{"County_needs_regulation":"Tarrant","Contact_phone":"469 745 5687"}
{"County_needs_regulation":"Kinga","Contact_phone":"469 384 7612"}