PostGISで円内のジオメトリを検索する | realsystems_jpのブログ

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倍(=遅い)になっている。