2014年3月17日月曜日

[PostGIS] メートル指定の半径で円を作る方法

最近仕事でPostGISを使うようになって、いろいろと調べているので、忘れないようにメモしていきます。

円のポリゴンを作るには、ST_Bufferを使えばよさそうなのですが、ジオメトリ型(geometry)に対してST_Bufferを使うと、バッファのサイズはジオメトリのSRID単位でしか指定できません。
たとえば、WGS84(SRID=4326)の場合だと、度単位の指定になります。

そこで、こういったSRIDでメートル単位でバッファサイズを指定するには、ジオメトリ型を一度ジオグラフィ型(geography)に変換してから、ST_Bufferに与える必要がありそうです。


(例)北緯40度、東経140度から半径100kmの円を作る
select st_setsrid(geometry(st_buffer(geography(st_makepoint(140, 40)), 100000)), 4326)