15
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

pgAdmin4 v3.3+PostGISがすごい!

Last updated at Posted at 2018-09-11

はじめに

2018/9/6にpgAdmin4 v3.3がリリースされました!
本記事では **新機能(geometry viewer)**について紹介します。

  • v3.3の新機能(リリースノート全文はコチラ
    • Feature #1407 - Add a geometry viewer that can render PostGIS data on a blank canvas or various map sources.
    • Feature #3503 - Added new backup/restore options for PostgreSQL 11. Added dump options for ‘pg_dumpall’.
    • Feature #3553 - Add a Spanish translation.

1点目を御覧ください。PostGISデータ向けのビュワーを標準実装したとのこと!これは試さずにはいられないですね!

PostGISとは、GIS(Geographic Information System)つまり、地理情報をPostgreSQL上に格納するためのEXTENSIONです。詳細は Let's Postgres 等で紹介されているので詳しくはそちらをご参照ください。

1. Setup

  • 環境情報
    • DBサーバ:VirtualBox CentOS7 PostgreSQL10.5 PostGIS2.4
    • クライアント:Windows10(64bit) pgAdmin4 v3.3

1.1. PostgreSQL10+PostGIS

1.1.1. 環境構築

今回の環境では、VirtualBox上でコンテナを立ち上げ、ポートフォワーディングさせて使用します。もちろん、VMに直接環境を構築してもOKです。

参考ですが、以下のような内容を記載すれば、必要なものは入ります。

# install and setting for PG
ENV PATH /usr/pgsql-10/bin:$PATH
ENV PGDATA /var/lib/pgsql/10/data
RUN set -ex && \
    rpm -ivh https://download.postgresql.org/pub/repos/yum/10/redhat/rhel-7-x86_64/pgdg-centos10-10-2.noarch.rpm && \
    yum install -y postgresql10 postgresql10-contrib postgresql10-libs postgresql10-server postgresql10-devel && \
    su -c "initdb -D $PGDATA --no-locale -E utf-8" postgres
# Install PostGIS
RUN yum install -y epel-release.noarch
RUN yum install -y gdal proj proj-devel proj-epsg
RUN yum install -y postgis24_10

今回は以下の手順でcontainerを起動させています。

# docker build -t image01 -f Dockerfile.03_pg10_postgis .
...(略)...
# docker run -d --privileged --net=dnw01 --ip=192.168.1.100 -p 15432:5432 --name contener01 image01 /sbin/init
f2e2ca915c41b01fde29a27e563fd554e044ce81d8ab4431b4a6955a383e9b63
# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                     NAMES
f2e2ca915c41        image01             "/sbin/init"        38 minutes ago      Up 38 minutes       0.0.0.0:15432->5432/tcp   contener01

1.1.2. PostGISを有効にする

yumで入れただけではPostgreSQL上でPostGISは有効にはなりません。
以下、PostGISを有効にして、GISのサンプルデータを入力するまでの手順を記載します。

// PG10起動
[postgres@f2e2ca915c41 ~]$ pg_ctl -D 10/data start
waiting for server to start....2018-09-11 23:53:13.499 JST [140] LOG:  listening on IPv4 address "0.0.0.0", port 5432
2018-09-11 23:53:13.499 JST [140] LOG:  listening on IPv6 address "::", port 5432
2018-09-11 23:53:13.501 JST [140] LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
2018-09-11 23:53:13.504 JST [140] LOG:  listening on Unix socket "/tmp/.s.PGSQL.5432"
2018-09-11 23:53:13.514 JST [140] LOG:  redirecting log output to logging collector process
2018-09-11 23:53:13.514 JST [140] HINT:  Future log output will appear in directory "log".
 done
server started

// PostGISを有効にする
[postgres@f2e2ca915c41 ~]$ psql postgres -c "CREATE EXTENSION postgis"
CREATE EXTENSION

// PostGISのバージョン確認
[postgres@f2e2ca915c41 ~]$ psql postgres -c "SELECT postgis_version()"
            postgis_version            
---------------------------------------
 2.4 USE_GEOS=1 USE_PROJ=1 USE_STATS=1
(1 row)

1.1.3. 動作確認

サンプルデータを入力し、PostgreSQLに地理データが格納できるか確認します。
サンプルとして、best_placeテーブルを作成し、POINT型のデータを1点追加しています。

// best_placeテーブルを作成
[postgres@f2e2ca915c41 ~]$ psql postgres -c "CREATE TABLE best_place (id int primary key);"
CREATE TABLE

// best_placeテーブルにPOINT型のカラムを追加
[postgres@f2e2ca915c41 ~]$ psql postgres -c "SELECT addGeometryColumn('best_place', 'fp', 4326, 'POINT', 2);"
                 addgeometrycolumn                 
---------------------------------------------------
 public.best_place.fp SRID:4326 TYPE:POINT DIMS:2 
(1 row)

// サンプルデータとしてある座標を挿入
[postgres@f2e2ca915c41 ~]$ psql postgres -c "INSERT INTO best_place VALUES (1, ST_GeomFromText('POINT(139.697800 35.270089)',4326));"
INSERT 0 1

参照してみると、ちゃんとデータが入っていることは確認できます。

[postgres@f2e2ca915c41 ~]$ psql postgres -c "SELECT * FROM best_place;"
 id |                         fp                         
----+----------------------------------------------------
  1 | 0101000020E6100000C364AA60547661403201BF4692A24140
(1 row)

これで下準備は完了です。
いよいよメインディッシュ!

1.2. pgAdmin4

今回の環境では、ホストマシンからVM上で起動しているPostgreSQLにアクセスさせるので、Windows10にインストールします。ダウンロード先はコチラ

1.2.1. インストール

環境に合わせてポチポチしていく。
01.PNG

02.PNG

インストーラーをダウンロードできるので、内容に従ってポチポチしていくとrebootを求められるのでVMを落として再起動しましょう。

pgAdminを起動するとこのような画面になります。
03.PNG

1.2.2. PostgreSQLへの接続

Seversを右クリックし、Server...をクリックします。
04.PNG

すると、Serverのプロパティウィンドウが出力されるので、適宜必要事項を埋めます。不足があれば、pgAdminから怒られます。
今回の環境ではVMが192.168.56.1で動いており、Containerの5432ポートとは15432でフォワーディングしているので以下のような設定になります。
05.PNG

以下のようにDBが追加されていることが確認できればOKです。
06.PNG

ちなみにグループ化されている項目を開いていくと先程作成したbest_placeテーブルとカラムの情報も確認できます。
07.PNG

2. 新機能のちから

「1.1.3. 動作確認」で入力した情報をpgAdminから確認することで新機能を確かめられます。

pgAdmin4のタブ「Tools」から「Query Tool」を選択します。
08.PNG

先程、実行したクエリ "SELECT * FROM best_place;"をここで実行します。F5か図の稲妻マークをクリックすることで実行できます。
09.PNG

実行結果が下のウィンドウに出力されます。新機能はカラム名の横の「目のマーク」をクリックすることで使用することができます。
10.PNG

ドンッ!!
11.PNG

Geometry Viewerタブが開かれ、さきほどプロットした点をOpenStreetMap背景上に表示してくれます。
これまではPostGISのデータを描画する際は描画用のソフトウェア(QGIS等)を別途利用する必要がありましたが、pgAdminだけでできるようになってしまいました!

さいごに

今回は新機能紹介ということで、これで終わります。
pgAdminはこれまであまり使うことがなかったので、試す良いきっかけになりました。せっかくなので、いろいろ試してみようと思います。

ちなみにプロットした場所は・・・
12.PNG
鯛が釣れるポイントでした。(釣れたことがあるとは言っていない)
ぜひ、釣りに行くときはPostgreSQL10+PostGIS+pgAdmin4を持参してみてください。

15
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?