0
1

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 1 year has passed since last update.

ShapeファイルをPostGISに投入して結合する

Last updated at Posted at 2021-03-29

概要

大量のShapeファイルをPostGISを使って結合する手順です。DockerでPostGIS環境を作成してデータベースにShapeを格納した後、一つのShapeファイルに書き出します。

DockerによるPostGIS環境の構築

使用するPostGISコンテナーのdocker-compose.yml

version: '3'
services:
    db:
        image: postgis/postgis:9.6-2.5-alpine
        ports: 
         - '5431:5432'
        environment:  
            POSTGRES_USER: postgres
            POSTGRES_PASSWORD: postgres-password
        volumes: 
         - pgdata:/var/lib/postgresql/data
         - ./data:/var/tmp/data

volumes: 
    pgdata: {}

Shapeファイルをデータベースに格納する。

以下のようなスクリプトを作成し、フォルダ内の.shpファイルをPostgreSQLデータベースに格納しました。引数で結合させるShapeファイルの名称を与えて、findで取得した.shpファイルを処理しています。

最初のファイルの時に、-pオプションで格納するShapeのテーブルを作成しています。

shp2pgsql -p -s 4326 -W UTF-8 ${file} base_${var} > ./sqlbase/base_${var}_create.pgsql

作成したSQLファイル(.pgsql)をpsqlで実行してテーブル作成、その後Shapeファイルをテーブルに格納しています。shp2pgsqlの-DオプションでCOPYコマンドで格納します。INSERTよりも高速とのこと。

shp2pgsql -a -D -s 4326 -W UTF-8 ${file} base_${var} > ./sqlbase/base_${var}_data${count}.pgsql
var=$1
count=0
while read -d $'\0' file; do

    echo $var $count

    if [ $count = 0 ]; then
        shp2pgsql -p -s 4326 -W UTF-8 ${file} base_${var} > ./sqlbase/base_${var}_create.pgsql
        psql -U postgres -d shape -f ./sqlbase/base_${var}_create.pgsql
    fi
    shp2pgsql -a -D -s 4326 -W UTF-8 ${file} base_${var} > ./sqlbase/base_${var}_data${count}.pgsql
    psql -U postgres -d shape -f ./sqlbase/base_${var}_data${count}.pgsql

    count=`expr $count + 1`

done < <(find Basemap -name *$var.shp -mindepth 1 -maxdepth 5 -print0)

PostgreSQLからShapeを出力する

bash-5.0# pgsql2shp -u postgres -f ./basemap_join/base_xda.shp shape base_xda
Initializing...
Done (postgis major version: 2).
Output shape: PolyLine
Dumping: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
0
1
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
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?