2 つの空間オブジェクト間の距離が指定されたしきい値以内である場合に true を、そうでない場合に false を返します。ST_Distance とは異なり、ST_DWithin は利用可能な空間インデックスを自動的に使用するため、近接クエリの標準的な選択肢となります。
構文
boolean ST_DWithin(geometry g1, geometry g2, double precision distanceOfSrid);
boolean ST_DWithin(geography gg1, geography gg2, double precision distanceMeters);
boolean ST_DWithin(geography gg1, geography gg2, double precision distanceMeters, boolean useSpheroid);パラメーター
| パラメーター | 型 | 説明 |
|---|---|---|
g1 | geometry | 最初のジオメトリーオブジェクト。 |
g2 | geometry | 2 番目のジオメトリーオブジェクト。 |
distanceOfSrid | double precision | しきい値となる距離。ジオメトリーオブジェクトの空間参照系 (SRS) で定義された単位を使用します。 |
gg1 | geography | 最初のジオグラフィーオブジェクト。 |
gg2 | geography | 2 番目のジオグラフィーオブジェクト。 |
distanceMeters | double precision | しきい値となる距離(メートル単位)。 |
useSpheroid | boolean | 楕円体参照系を使用するかどうかを指定します。楕円体参照系を使用すると、より正確な結果が得られますが、処理速度がやや低下します。 |
注意事項
両方の引数が
geometry型の場合、同じ空間参照識別子 (SRID) を持つ必要があります。両方の引数が
geography型の場合、距離はデフォルトでメートル単位で測定されます。この関数は、利用可能なすべての空間インデックスを使用してバウンディングボックスを比較するため、近接チェックは設計上インデックスによる高速化が行われます。
3D の近接チェックを行う場合は、代わりに ST_3DDWithin を使用してください。
使用例
ST_DWithin と ST_DFullyWithin の違い
ST_DWithin は、2 つのオブジェクト間の最短距離がしきい値以内である場合に true を返します。ST_DFullyWithin はより厳格で、両方のオブジェクト上のすべてのポイントがしきい値以内にある必要があります。
SELECT ST_DFullyWithin(g1, g2, 2), ST_DWithin(g1, g2, 2)
FROM (
SELECT 'LINESTRING(0 1,1 1)'::geometry AS g1,
'LINESTRING(0 0,0 -1)'::geometry AS g2
) AS test;期待される出力:
st_dfullywithin | st_dwithin
-----------------+------------
f | t
(1 row)次のステップ
ST_DFullyWithin:2 つのオブジェクト上のすべてのポイントが指定された距離以内にあるかどうかをチェックします。
ST_3DDWithin:投影座標系における 3D オブジェクトの近接チェックを行います。