Shapeファイルのインポート/エクスポート
shp2pgsqlとpgsql2shpコマンドを使用する場合
ShapeファイルをPostGISに投入
まずはデータベースを作成します。 データベースを作成するときにはテンプレート「template_postgis」を指定しておく必要があります。
> createdb -U "ユーザ名" -T template_postgis "データベース名"
shp2pgsqlコマンドを使って、データベースにデータを追加するSQLファイルを作成します。
> shp2pgsql -s "SRID番号" -W "文字コード" "shpファイル名"
"テーブル名" "データベース名" > "SQLファイル名"
テーブル名は既存のテーブルを指定することができません。
最後に、できたSQLファイルを実行します。
> psql -U "ユーザ名" -d "データベース名" -f "SQLファイル名"
PostGISからShapeに吐き出し
pgsql2shpコマンドを使って、データベースの内容をShapeファイルに書き出すには以下のようにします。
> pgsql2shp -u "ユーザ名" -P "パスワード" -f "Shapeファイル名"
"データベース名" "テーブル名"
ユーザ名のオプションが普通は大文字の"-U"なのに、このコマンドだけ小文字なので注意!
また、パスワードを後で聞かれなくて、コマンドラインで指定しないと動かないようです。
ogr2ogrコマンドを使用する場合
OGR2OGR Cheatsheet に詳しく書かれています。大体以下の要領です。 データベースの作成は上記と同じように行います。
ShapeファイルをPostGISに投入
> ogr2ogr -f "PostgreSQL" -a_srs "EPSG:EPSG番号" PG:"host=ホスト名 user=ユーザ名
dbname=データベース名 password=パスワード" Shapeフィアル名 -nln テーブル名
-nlnオプションを省略すると拡張子を除いたファイル名がテーブル名になります。
また、プライマリキーの"gid"フィールドは"ogc_fid"、
GeometryColumnの"the_geom"は"wkb_geometry"という名前にそれぞれなります。
さらに、shp2pgsqlとは文字列の取り扱いが異なります。
shp2pgsqlでは文字列はvarchar(255)として登録されますが、
ogr2ogrでは文字列はcharacter(255)で、固定長です。
なので、末尾に余計な空白があります。
このコマンドを使用した場合、shp2pgsqlのようにSQLファイルを出力するのではなく、直接データベースに投入します。
PostGISからShapeに吐き出し
以下のコマンドラインでShapeに吐き出します。
> ogr2ogr -f "ESRI Shapefile" Shapeファイル名 PG:"host=ホスト名 user=ユーザ名
dbname=データベース名 password=パスワード" "テーブル名"
テーブル名の指定の仕方に注意してください(ここだけ別にダブルクォーテーションで囲みます)。
このコマンドを使用した場合、.prjファイルも作成されて、便利なのですが、 フィールドがアルファベット順に並び替えられてしまいます。
用語
| 語 | 意味 |
|---|---|
| SRID | spatial referencing system identifier。 こちらと、 こちらを参照。 |
