PostGIS は、地理データ オブジェクトのサポートを追加する PostgreSQL データベースの拡張機能です。これにより、PostgreSQL データベースを使用して空間データを保存およびクエリできるようになります。ご想像のとおり、PostGIS と Docker を組み合わせることで、空間データを管理する効率的かつ広範な方法が提供されます。
このチュートリアルでは、Docker コンテナ内に PostGIS インスタンスをすばやくセットアップする方法を学びます。また、PostGIS の基本についていくつか説明し、空間データをロードし、コンテナーを使用していくつかの基本的なクエリを実行する方法を学びます。
要件:
このチュートリアルを進めるには、次のものが揃っていることを確認してください。
- システムに Docker エンジンをインストールしました。ターゲット システムに Docker をインストールする方法については、チュートリアルを確認してください。
- PostgreSQL と空間データの基本的な知識
所定の要件が満たされているので、チュートリアルを続行できます。
Docker で PostGIS を実行する
続行して、PostGIS コンテナをセットアップしましょう。まず、次のコマンドを使用して、Docker Hub から PostGIS コンテナをプルします。
$ docker pull postgis/postgis
イメージをダウンロードしたら、次のコマンドに示すように、イメージを使用してコンテナーを実行できます。
$ docker run --name postgis-server -e POSTGRES_PASSWORD =password -d -p 5432:5432 postgis/postgis
指定されたコマンドでは、次のパラメーターを指定します。
- –name – これにより、コンテナーの名前を指定できます。
- -e – これにより、PostgreSQL パスワードを環境変数として設定できるようになります。これは、postgres ユーザーに使用されるパスワードです。
- -d – これは、コンテナーをバックグラウンド モードまたはデタッチ モードで実行するように Docker に指示します。
- -p 5432:5432 – これにより、コンテナ内のポート 5432 をポート 5432 上のホストにマッピングできるようになります。
コンテナーが実行中であることを確認するには、次のコマンドを使用します。
$ ドッカー psPostGIS コンテナがリストに表示されるはずです。
PostGIS に空間データをロードする
PostGIS コンテナーが実行されたので、GeoJSON、CSV などのさまざまなツールと形式を使用して空間データをロードできます。
この場合、次のコマンドに示すようにシェープファイルを使用します。
$ mkdir -p ~/data$ cd ~/データ
wget https://www.naturalearthdata.com/http//www.naturalearthdata.com/download/110m/cultural/ne_110m_admin_0_countries.zip
$ ne_110m_admin_0_countries.zip を解凍します
指定されたコマンドでは、まず、ロードするデータを保存するディレクトリを作成します。次に、指定されたリンクから地理データをダウンロードし、ディレクトリに抽出します。
次のステップは、データをデータベースにロードすることです。まず、次のコマンドを使用して PostgreSQL データベースに接続します。
$ docker exec -it postgis-server psql -U postgres -d postgresパスワードの入力を求められたら、コンテナーの実行時に構成したパスワードを入力します。これにより認証され、PostgreSQL シェルにドロップされます。
データベースに接続したら、「shp2pgsql」ユーティリティを使用して、前の手順で抽出したシェープファイルからデータをインポートできます。
postgres=# shp2pgsql -I -s 4326 ne_110m_admin_0_countries | psql -U postgres -d postgres前のコマンドでは、空間データのクエリを高速化するために -I オプションを使用して空間インデックスを作成しました。また、-s パラメーターを使用して、座標系を 4326 として指定します。 EPSG:4326 は、WGS 84 の標準座標状態システムです。
PostGIS クエリ データ
データをロードしたら、「\q」コマンドを実行するか終了して PSQL ユーティリティを終了できます。
次に、データがロードされていることを確認するために、次のコマンドを実行してデータベースに再接続します。
$ docker exec -it postgis-container psql -U postgres -d postgres次に、基本的な空間クエリを実行して、データが保存されていることを確認できます。
結論
このチュートリアルでは、PostGIS サーバーを Docker コンテナとして実行し、データをデータベースにロードする方法を学習しました。