PostGISで円内のジオメトリを検索する
PostGISで、座標(35.0, 135.0)の点を中心にした半径1000mの円内にある道路のリンクを探す。
円のジオメトリが無いので、
ST_Buffer( GEOGRAPHY( ST_POINT(135.0, 35.0) ) , 1000)
として生成したポリゴンと、道路リンクのジオメトリに交点があるかどうかで調べる。
SELECT *,st_distance(geom, st_setsrid(ST_POINT(135.0, 35.0), 4326), false)
FROM road_link
WHERE geom_column && ST_Buffer( GEOGRAPHY( ST_POINT(135.0, 35.0) ) , 1000);
あるいは、道路リンクのジオメトリと、点との距離が1000m以内かどうかで調べる。
SELECT *,st_distance(geom, st_setsrid(ST_POINT(135.0, 35.0), 4326), false)
FROM drm.mt_drm2603w_geom
WHERE st_distance(geom, st_setsrid(ST_POINT(135.0, 35.0), 4326), false) < 1000
道路のリンクは、LINEではなくLINESTRINGだからなのか、
あるいは、ポリゴンを使った擬似円だからなのか、
前者の場合は、リンクと点の距離が1000m以上のものも含まれてしまう。
処理時間は、後者の方が約4/3倍(=遅い)になっている。