以前PostgreSQLのPostGISを使った検索を行った
最近このGISデータに対してある地点から近いデータを取得するということをやる必要がでてきた
このとき、2点間の距離を考える場合にgeometry
とgeography
という2つの検索方法があるのを知ったので調べた
2つのざっくりとした説明は以下
- geometry — 平面空間データ型
ユークリッド座標系上の地物を表現するために使われる - geography — 回転楕円体空間データ型
球面座標系での地物表現に使われる
つまり、地球の楕円体を考慮して距離を出すかどうか
精度を気にするのであればgeography
にしたほうがよいということになる
今回は精度を気にするのでgeography
を使う
クエリはこんな感じになる
where ST_Distance(geography g1, geography g2) <= #{distance}
http://postgres.cn/docs/postgis-2.3/ST_Distance.html
地球が丸いというのを計算に考慮するかどうかの違いがあることを知って面白かったし、覚えておくべき重要なことだなっと思った
他参考
https://www.sraoss.co.jp/tech-blog/pgsql/postgis/
https://ochi0218.hatenablog.com/entry/20101229/1293646091
https://zenn.dev/boiledorange73/articles/0015-pgis-searchneighbour