データベースに位置情報などを格納しておき、ある範囲(定点やkm圏内、好きな図形の中)に含まれるデータを検索したい
PostgreSQLを使っている場合はどうやらPostGISというのがよさそうということで使ってみることにした
PostGIS
PostGISはPostgreSQLの拡張で、使用すると専用のデータ型が追加され、GIS (地理情報システム)オブジェクトを格納することができる
PostgreSQL 本体と独立にオープンソースソフトウェアとして開発されている
詳しくは以下 postgis.net
dockerで開発環境をつくる
dockerイメージがあるのでそれを使う
postgis/postgis:11-3.0-alpine
上のイメージを使ってdockerコンテナを起動するとpublicスキーマにPostGIS関係のものが作られている
PostGISの設定をpublicから別のスキーマに変えることができなさそうなので、アプリで使うスキーマがpublicでない場合はcurrentSchemaで2つのスキーマを定義する必要があるので注意
DBサーバーが立ち上がったら、重要な設定として以下のクエリを実行する
CREATE EXTENSION postgis; CREATE EXTENSION postgis_topology;
こうすることでPostGISを扱うことができるようになる
テーブルの作成
例として座標テーブルをつくる
create table COORDINATE ( COORDINATE_ID BIGSERIAL, LAT_LNG GEOMETRY(POINT, 4326) NOT NULL, primary key (COORDINATE_ID) );
緯度経度カラムにGEOMETRY(POINT, 4326)
型をつかう
4326
の数字はWGS84経度緯度 (SRID:4326)という意味らしいがよくわからない
とりあえずこんな感じで利用することができるようになった