名前

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は,大きなバッファ領域について前のバージョンより効果的になる,より短縮した距離関数を使っています.

このメソッドは 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;
			  

関連情報

ST_Distance, ST_Expand