UGA Boxxx

つぶやきの延長のつもりで、知ったこと思ったこと書いてます

【PostgreSQL】PostGISを利用する

データベースに位置情報などを格納しておき、ある範囲(定点やkm圏内、好きな図形の中)に含まれるデータを検索したい

PostgreSQLを使っている場合はどうやらPostGISというのがよさそうということで使ってみることにした

PostGIS

PostGISPostgreSQLの拡張で、使用すると専用のデータ型が追加され、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)という意味らしいがよくわからない

とりあえずこんな感じで利用することができるようになった