Home
> PostgreSQL/PostGISのダウンロードとインストール >
Shapefileの投入と表示確認
|
PostGISへShapefileの投入と表示確認 |
update:2007/07/30 |
- このページで解説している環境
- WindowsXP SP2
- ms4w1.6 ここではms4wでの説明ですが、AN HTTPDでも可能です。
- PHP 4.4.4
- MapScript 4.10
- PostgreSQL 8.2.1-1 / PostGIS 1.2.0
このページは次のサイトを参考にさせていただきました。
- PostGIS / 英文:PostGIS Manual 和訳(少し古いですが):PostGIS Manual
- PostGIS(ダウンロードしたバージョン)の英文はPostgreSQLに添付されています(スタート > すべてのプログラム > PostgreSQL8.2 > ドキュメント > PostGISドキュメント)が、古いバージョンのものだったりしますので、オンラインのバージョンを参照にすると良いでしょう。ただし翻訳されたものはなく、英文です。
- ダウンロードしたもの
- ESRIジャパン提供 ArcGIS Desktopサポート のShapefile 「japan.zip」
- メニュー
- Shapefileのダウンロード
- Shapefileの投入 / shp2pgsql の使用
- PostGISその他メモ
- 新しいデーターベースを作成する場合
- PostGISへデータを追加する場合
- 異なる座標系を投入したい場合
- 文字コードエラーについて(文字化け)
- PostGISの地図データを Shapefile に変換したい場合 / pgsql2shp 、ogr2ogr の使用方法
- ogr2ogrでMapInfo MIF/MID へエクスポートする方法
- Shapefileの投入の確認/pgAdminVの使用
- MapServerからの表示確認
■ Shapefileのダウンロード
ArcGIS Desktopサポートのサイトから日本地図のShapefile 「japan_ver60.zip」(2007/1/21現在の最新バージョン)をダウンロードする japan_ver60.zipを解凍し、C:/mapdataフォルダに移動する
- フォルダの階層は次のとおりになります。
C:/mapdata
- japan_ver60
- japan_ver60.shp
- japan_ver60.shx
- japan_ver60.dbf
- その他のファイル
■ Shapefileの投入 PostGISに添付されている shp2pgsql を使用してShapefileをデーターベースに投入します
- コマンドプロンプトで、カレントディレクトリを PostgreSQLをインストールしたディレクトリ下のbinに移動します
C:\>cd \"Program Files"\PostgreSQL\8.2\bin
C:\Program Files\PostgreSQL\8.2\bin>
- template_postgisをコピーしてgisdbという名前のデーターベースを作成します
C:\Program Files\PostgreSQL\8.2\bin>createdb -U postgres -T template_postgis gisdb
パスワード:パスワードを入力する(画面には表示されない)
CREATE DATABASE
- データーベースに先ほどの Shapefile 「japan」 を投入します
※ここでの座標系SRIDは「4612(GRS80を表している)」を指定) SRIDについては、GIS基礎知識 のページをご参照ください。
※-W sjis 作成するSQLの文字コードを指定しています。ここではShift_JISのsjisです。
C:\Program Files\PostgreSQL\8.2\bin>shp2pgsql -s 4612 -W sjis C:/mapdata/japan_ver60/japan_ver60.shp japantb gisdb > japan.sql
Shapefile type: Polygon
Postgis type: MULTIPOLYGON[2]
C:\Program Files\PostgreSQL\8.2\bin>psql -U postgres -d gisdb -f japan.sql
ユーザ postgres のパスワード:パスワードを入力する(表示されない)
以下のメッセージが出てShapefileがPostGISへ投入されました。
(中略)
INSERT 0 1
INSERT 0 1
COMMIT
C:\Program Files\PostgreSQL\8.2\bin>
- これで投入が完了しました。exitでコマンドプロンプトを閉じます。
C:\Program Files\PostgreSQL\8.2\bin>exit
■ PostGISその他メモ(その他の使用方法メモです。必要でない方は読み飛ばして下さい)
- テンプレートを使用せず、新しいデーターベースを作成する場合(現在使用方法を検証中)
PostgreSQL8.1.5以降にパッケージされているPostGISでは、作成したデーターベースに自動的に空間地理テーブルが生成されなくなり、手動で作成する必要があるようです。使用方法を検証中です。
C:\Program Files\PostgreSQL\8.2\bin>createdb -U postgres gisdb
パスワード::パスワードを入力する(画面には表示されない)
CREATE DATABASE
C:\Program Files\PostgreSQL\8.2\bin>psql -U postgres -h localhost gisdb
ユーザ postgres のパスワード:パスワードを入力する(画面には表示されない)
PostgreSQL の会話型ターミナル、psql 8.2.1 へようこそ
\copyright とタイプすると、配布条件を表示します。
\h とタイプすると、SQL コマンドのヘルプを表示します。
\? とタイプすると、psql コマンドのヘルプを表示します。
\g と打つかセミコロンで閉じると、クエリーを実行します。
\q で終了します。
gisdb=# CREATE TABLE SPATIAL_REF_SYS ( SRID INTEGER NOT NULL PRIMARY KEY, AUTH_NAME VARCHAR(256), AUTH_SRID INTEGER, SRTEXT VARCHAR(2048), PROJ4TEXT VARCHAR(2048));
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "spatial_ref_sys_
pkey" for table "spatial_ref_sys"
CREATE TABLE
gisdb=# CREATE TABLE GEOMETRY_COLUMNS ( F_TABLE_CATALOG VARCHAR(256) NOT NULL, F_TABLE_SCHEMA VARCHAR(256) NOT NULL, F_TABLE_NAME VARCHAR(256) NOT NULL, F_GEOMETRY_COLUMN VARCHAR(256) NOT NULL, COORD_DIMENSION INTEGER NOT NULL, SRID INTEGERNOT NULL, TYPE VARCHAR(30) NOT NULL );
CREATE TABLE
gisdb=# \q
C:\Program Files\PostgreSQL\8.2\bin>shp2pgsql -s 4612 C:/mapdata/japan_ver60/japan_ver60.shp japantb gisdb > japan.sql
Shapefile type: Polygon
Postgis type: MULTIPOLYGON[2]
C:\Program Files\PostgreSQL\8.2\bin>psql -U postgres -d gisdb -f japan.sql
ユーザ postgres のパスワード:パスワードを入力する(表示されない)
エラー
................
- PostGISへデータを追加する場合
※追加で投入する場合/複数のshapefileをPostGISへ投入する場合は次のように指定します(オプション "-a" を付ける)。
(ここでは、もともと存在するテーブルへ、osaka.shp と hyougo.shp と kyoto.shp の3つのshapefileを追加で投入する方法です。この時、ファイルは同じ属性と同じデータタイプである必要があります 。また異なる座標系のデータを追加で投入することはできません)
C:\Program Files\PostgreSQL\8.2\bin>shp2pgsql -a -s 4612 C:/mapdata/osaka.shp tbname dbname > kinki.sql ←osakaを投入
C:\Program Files\PostgreSQL\8.2\bin>shp2pgsql -a -s 4612 C:/mapdata/hyougo.shp tbname dbname > kinki.sql ←hyougoを投入
C:\Program Files\PostgreSQL\8.2\bin>shp2pgsql -a -s 4612 C:/mapdata/kyoto.shp tbname dbname > kinki.sql ←kyotoを投入
C:\Program Files\PostgreSQL\8.2\bin>psql -U postgres -d gisdb -f kinki.sql ←あとは同じ
ホスト名 localhost
パスワード:パスワードを入力する(表示されない)
- 異なる座標系を投入したい場合
PostGISへ異なる座標系の地図データを追加で投入することはできません。
異なる地図データを追加で投入したい場合は、ogr2ogrを使用して事前に追加する地図データの座標変換を行い、その後に追加投入します。ogr2ogrの座標変換の方法はこちらを参照ください。
- 文字コードエラーについて
ShapefileをPostGISへ投入する際の文字化けエラーや、pgsql2shpでPostGISからShapefileへ変換した際の文字化けについては、PostgreSQL(PostGIS)のバージョンによって対処が異なります。
バージョン8.2.1の場合は、shp2pgsql のオプションで -W sjis を使用します。
それ以下のバージョンの場合は、「PostgreSQL/PostGISその他メモ>文字コードについて」を参照して下さい。
- PostGISの地図データを Shapefile に変換したい場合
PostGISへ投入した地図データをShapefileへ変換したい場合は、pgsql2shpを使用します。
※pgsql2shp だと座標系情報が返されないようです。エクスポートしたshapefileに座標系を付け加えたい場合は、ogr2ogrを使用して座標系情報を付加させることができます。ogr2ogrの使用についてはこちらを参照。コマンドプロンプトで、カレントディレクトリを PostgreSQLをインストールしたディレクトリ下のbinに移動します。
C:\>cd \"Program Files"\PostgreSQL\8.2\bin
C:\Program Files\PostgreSQL\8.2\bin>
pgsql2shp を使用してshapefile へエクスポートします。
C:\Program Files\PostgreSQL\8.2\bin>pgsql2shp -f c:\Shapefile.shp -h localhost -p 5432 -P パスワード -u postgres dbname dbtable
- pgsql2shp [ オプション ] <データベース名> <テーブル名> #カッコ[ ]内はオプション
- pgsql2shpの用法は、コマンドラインで pgsql2shp と入力すると表示されます。
C:\Program Files\PostgreSQL\8.2\bin>pgsql2shp
RCSID: $Id: pgsql2shp.c 2513 2006-10-14 14:22:10Z mschaber $ RELEASE: 1.2.0
USAGE: pgsql2shp [<options>] <database> [<schema>.]<table>
pgsql2shp [<options>] <database> <query>
OPTIONS:
-f <filename> Use this option to specify the name of the file to create.
-h <host> Allows you to specify connection to a database on a machine other than the default.
-p <port> Allows you to specify a database port other than the default.
-P <password> Connect to the database with the specified password.
-u <user> Connect to the database as the specified user.
-g <geometry_column> Specify the geometry column to be exported.
-b Use a binary cursor.
-r Raw mode. Do not assume table has been created by the loader. This would not unescape attribute names and will not skip the 'gid' attribute.
-k Keep postgresql identifiers case.
-? Display this help screen.
- ogr2ogrでMapInfo MIF/MID へエクスポートする方法 ※ここでは、FWTools Shell を使用した場合
C:\Program Files\FWTools1.0.0>ogr2ogr -f "MapInfo File" -dsco "FORMAT=MIF" c:/ma
pdata/city.mif "PG:dbname=gis user=postgres host=localhost password=パスワード" city
■ Shapefileの投入の確認/pgAdminVでテーブルが作成されているか確認
スタート > すべてのプログラム > postgreSQL8.2 > pgAdminVをクリック 「PostgreSQL Database Ser....」を右クリックし、接続をクリックします![]()
パスワードを入力し、OKをクリック
pgAdminVが起動し、画面のとおり japantbテーブルが追加されています また、japantbのデータービューをクリックすると、投入した詳細データが確認できます
■ MapServerからの表示確認
- 当サイトから japan_pgis_ms4.10.0.zip をダウンロード解凍し、フォルダ名を japan にリネイムし、サーバーのルートディレクトリーに移動します
※ここでは、C:/ms4w/Apache/htdocs/フォルダに保存します。
japan_pgisフォルダの構成 C:/ms4w/Apache/htdocs/
|- japan
| -japan.map
| -index.php
| -fonts.txt
- ダウンロードした japan.map をテキストエディタで開け、次のとおり自分の環境に設定し、保管します。
- EXTENT : 初期表示の経度緯度 ※ここでは日本列島全域の経緯
- SIZE : 表示される画像サイズ
- IMAGEPATH : 表示された画像のパス ※デフォルトではms4wのパス。AN HTTPDの場合はAN HTTPD エイリアスの設定を参照
- IMAGEURL : 表示された画像のURL ※上記同様
- LAYER/CONNECTION ※設定詳細については、MapServerマニュアル(英語)を参照
- postgres : スーパーユーザー名を入力します ※ここでは postgres
- dbname : データーベース名
- host : データーベースサーバーのホスト名
- 「パスワードを入力」の箇所を自分のパスワードに書き換えます。
- port : ポート番号
- DATA : "地図に表現される幾何学を含むカラム名 from テーブル名"
※地図に表現される幾何学を含むカラム名は、pgAdminVのjapantb にある座標データーが格納されている列の名前です。
#japan.mapのソース
NAME JAPAN MAP
EXTENT 122.933906 24.044795 153.982426 45.556909
STATUS ON
INTERLACE ON
SIZE 600 400
IMAGECOLOR 102 153 255
UNITS METERS
WEB
IMAGEPATH "C:/ms4w/tmp/ms_tmp/"#ms4wでの指定
IMAGEURL "/ms_tmp/"
END
fontset "fonts.txt" #このmapfileからの相対パスで指定
LAYER
NAME "japan postgis"
CONNECTIONTYPE POSTGIS
CONNECTION "user=postgres dbname=gisdb host=localhost password=パスワード port=5432"
DATA "the_geom from japantb"
TYPE POLYGON
STATUS ON
labelitem "city1" #★表示させたいフィールド名
CLASS
TEMPLATE void
COLOR 110 50 100
OUTLINECOLOR 200 200 200
label
type truetype
font msgothic
encoding SJIS #PostgreSQLのクライエントエンコードをsjisを設定した場合はSJISを指定します
color 255 255 255
size 8
END
END
TOLERANCE 100
END
END
- fonts.txtでラベル表示のフォントを指定しています。詳細は、「MapServer 各種セッティング メモ > MapServer(地図)で日本語ラベルの表示」をご参照ください。※ここではWinXPでのフォント指定の設定です。他のWindowsはfonts.txtの中身のパスを変更してください。
- MS4W を起動させ、http://localhost/japan/ とブラウザへ入力すれば、地図が表示されます。
ズームインにチェックを入れ、地図上の任意の箇所をクリックすると地図が拡大します。
- 縮小・拡大した画像(実寸表示)
Copyright (C) 2007 Yaskey. All Rights Reserved.