ST_DWithin — ジオメトリが、指定したジオメトリから指定した距離内にある場合に、TRUEを返します。ジオメトリについては、距離は空間参照系で定義されている単位になります。ジオグラフィについては、メートル単位で、デフォルトではuse_spheroid=true(回転楕円体を使った計算)となり、速いチェックをするにはuse_spheroid=falseとして球面を使って計算します。
boolean ST_DWithin(
geometry
g1, geometry
g2, double precision
distance_of_srid)
;
boolean ST_DWithin(
geography
gg1, geography
gg2, double precision
distance_meters)
;
boolean ST_DWithin(
geography
gg1, geography
gg2, double precision
distance_meters, boolean
use_spheroid)
;
ジオメトリが、指定したジオメトリから指定した距離内にある場合に、TRUEを返します。
ジオメトリについては、距離は空間参照系で定義されている単位になります。この関数が意味を持つためには、与えられるジオメトリは両方とも同じ座標系で同じSRIDを持つ必要があります。
ジオグラフィについては、メートル単位で、デフォルトではuse_spheroid=true(回転楕円体を使った計算)となり、速いチェックをするにはuse_spheroid=falseとして球面を使って計算します。
この関数の呼び出しによって、ジオメトリで使用可能なインデクスを使用したバウンディングボックスの比較が自動的に行われます。 |
1.3より前では、ST_Expandは一般的に&&とST_Distanceとを併用して、同じ効果を得ていました。1.3.4より前では、この関数は、基本的にこのやり方の短縮版でした。1.3.4から、ST_DWithinは、大きなバッファ領域について前の版より効果的になる、より短縮した距離関数を使っています。 |
3次元ジオメトリの場合にはST_3DDWithinを使います。 |
このメソッドはOpenGIS Simple Features Implementation Specification for SQL 1.1.の実装です
初出: 1.5.0 ジオグラフィが導入されました。
-- それぞれの学校から3000単位以内の、最も近い病院の探索。 -- インデクスを使用しないST_Distanceの処理に渡す学校リストを制限するために、 -- ST_DWithin探索でインデクスを使います。 -- 空間参照系の単位がメートルの場合は、単位はメートルになります。 SELECT DISTINCT ON (s.gid) s.gid, s.school_name, s.the_geom, h.hospital_name FROM schools s LEFT JOIN hospitals h ON ST_DWithin(s.the_geom, h.the_geom, 3000) ORDER BY s.gid, ST_Distance(s.the_geom, h.the_geom); -- 病院が近くに無い学校の探索。 -- 病院が3000単位内に無い全ての学校を探索します。 -- 単位は空間参照系の単位です(メートル、フィート、度) SELECT s.gid, s.school_name FROM schools s LEFT JOIN hospitals h ON ST_DWithin(s.the_geom, h.the_geom, 3000) WHERE h.gid IS NULL;