geo_within_distance

ポイントに近接する地理空間オブジェクトを決定します。
boolean geo_within_distance(any*, any*,double)

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

この関数は、1番目のジオメトリが2番目のジオメトリからN mの距離内にあるかどうかを判断します。

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

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

最終的に、両方のパラメータがそれぞれ単一のジオメトリ・オブジェクトを返す場合、1番目のジオメトリが2番目のジオメトリからN m以内の距離にあればtrueを返します。Nは3番目のパラメータで返される数値です。それ以外の場合はfalseを返します。2つのジオメトリの間の距離は、1つ目のポイントが1つ目のジオメトリに属し、2つ目のポイントが2つ目のジオメトリに属しているポイントのペアの距離の最小値として定義されます。Nが負の数の場合は、0に設定されます。

例: 市役所はこの先5 km以内にありますか。距離はどれだけですか。
SELECT t.poi.address.street AS city_hall_address,
geo_distance(
    t.poi.location,
    { 
        "type" : "point",
        "coordinates" : [-120.653828125,38.85682013474361]
    }

) AS distance_in_meters
FROM PointsOfInterest t
WHERE t.poi.kind = "city hall" AND
geo_within_distance( 
    t.poi.location,
    { 
        "type" : "point",
        "coordinates" : [-120.653828125,38.85682013474361]
    },
    5000
);
説明:
  • PointsOfInterest表を問い合せて、city hallの行をフィルタします。
  • geo_within_distance関数を使用して、指定した場所から5 km (5000m)以内の市役所をフィルタします。
  • また、geo_distance関数を使用して、その場所と市役所の間の実際の距離をフェッチします。
結果:
{"city_hall_address":"70 North 1st street","distance_in_meters":1736.0144040331768}

市役所は現在の場所から1736 m(1.73 km)です。