2009年11月22日日曜日

WMSのテスト

まだやってなかったのでやってみる。
環境はubuntu8.04です。
ます、どこかでshapeファイルを拾ってきます。

今回はClaudmadeさんのところから japan.shapefiles.zip を拾ってきました。
CloudMade Download

shapeファイルをpostGISに変換


これを、shp2pgsqlでsqlに変換します。
shapeファイルは同じ名前で、拡張子が異なる三つのファイルが一組となっています。今回は海岸線のデータをテストに使用します。

$shp2pgsql japan_costline cmtest > japan_costline.sql


二個目の引数は変換でつかうテーブルの名前で、
postgreSQLのデータベース名を指定します。
そうするとsqlができるので、
これをpostgisでposgreSQLのデータベースに読み込みます。
postgisは地図系の言語で、PostgrSQLに乗っかるものです。

#ユーザーをpostgresに変更
$ su postgres
#テストのデータベースcmtestの作成 UTF8で作成が必要です
$ psql -E UTF8 cmtest
#作成したcmtestにpostgisを組み込みます。
$ createlang -U postgres plpgsql cmtest
#cmtestにpostgisの基本データベースを作成
$ psql -d cmtest -f postgis.sql
#cmtestに座標系のインデックスを作成
$ psql -d cmtest -f spatial_ref_sys.sql
#cmtestに変換したシェープファイルを読み込み
$ psql -d cmtest -f japan_costline.sql


これで読み込めるようにするには、とてもいろいろ問題ありました。
スキルが足りてないだけなんですけどね。



postgreSQLの初期設定


まず、postgreSQLは基本postgresというユーザーで作業します。
aptitudeでテキトーにインストールした場合、既にできていると思います。
その場合パスワードがわからないので、su/sudo可能なユーザーでリセットします。

$ sudo passwd postgres


次に、postgisは最新のものに入れ替えます。
http://postgis.refractions.net/ からダウンロードできます。

postgisのコンパイルにはpostgresql-server-dev版とGEOSの3.0以降が必須となります。
コンパイルは ./configure & make & make installでOKです。

ここまで正常に完了するのに3時間ぐらいかかりました。
ああ、つかれた。

postgreSQLをCGIから使えるようにする


mapServerの動きは、ApacheからCGIでコールされて、
TCP/IPでpostgreSQLにつないでデータを取得、画像を生成してくれます。
posgreSQLはデフォルトでは
ネットワークからのアクセスを受け付けてくれません。
またこの辺りの設定はpostgreSQLの8.0以前か以後かで
設定方法が大きく変わっています。
今回は8.3をつかっているので以降のほうの設定です。

/etc/postgresql/8.3/main/ あたりに設定ファイルがありますので変更します。
まず、TCP/IP全部受け付けるように変更します。
細かいところはもうひとつで設定するので、
ここでは全部受けるようにしても大した影響はありません。
postgresql.confの

#listen_address = 'localhost'
listen_address = '*'


アクセスの制限はpg_hba.confで行います。
ローカルのアドレスぐらいを設定してください。
ここは適当だとあぶないです。
環境によっては先ほどの設定も適当だと危ないのですが
自宅で一人で使ってる程度なら大丈夫レベルの安心です。
ノーガードな無線LANとかだと、少し考えた方がいいと思います。

pg_hba.confのIPv4の最後に、ローカルのアドレスを指定します。

host all all 192.168.0.0/16 trust

使う度にIPが変わるような環境だと面倒かもしれません。
Webからアクセスする場合最後のtrustがポイントです。


postgreSQL再起動


これでpostgresqlを再起動します。
サービス再起動には

$sudo aptitude install debian-helper-scripts

しておくと、

$sudo service postgresql-8.3 reload

で行えます。8.3とバージョンがつくのがポイントらしいです。



mapファイルの設定


すごく基本的な設定なのですが情報が少なくてかなり苦労しました。以下mapファイルの内容です。

#
# Start of map file
#
MAP
NAME CMTEST
STATUS ON
UNITS DD #緯度経度で指定
PROJECTION #これが無いと動かない WMSのSRSで指定するものを含めるようにする
"init=epsg:4326"
END
# EXTENT -48261.1 -146653.1 -42261.1 -140700.1 #WMS以外つかわないのでコメントアウト
SHAPEPATH "data"
IMAGECOLOR 10 10 60 #背景色
IMAGETYPE PNG #生成する画像フォーマット 関連ライブラリが全部必要

WEB
HEADER templates/header.html
TEMPLATE "set in index.html"
FOOTER templates/footer.html
MINSCALE 100 # これ以上拡大できない
MAXSCALE 25000000 #これ以上パンできない

# change the next two lines to match your setup
IMAGEPATH "/home/mage/www/mapworkshop/tmp/" #生成した画像を一時保存するフォルダ
IMAGEURL "/~mage/mapworkshop/tmp/" 

METADATA
WMS_TITLE "CMTEST"
WMS_ABSTRACT "This is a Japan Coastline Test Server Soure from ClaudMade/OSM"
WMS_ACCESSCONSTRAIClNTS "none"

WMS_ONLINERESOURCE "http://localhost/~mage/mapworkshop/itasca/index.html"

WMS_SRS "EPSG:4326" # EPSG:4326 を指定
END
END

#
# Start of layer definitions
#
LAYER
NAME "cmtest"
CONNECTIONTYPE postgis #postGIS使用
CONNECTION "user=postgres password=********** dbname=cmtest host=192.168.2.2"
DATA "the_geom from cm091118jpcoast" #テーブル指定
METADATA
DESCRIPTION "cmtest"
"wms_title" "cmtest"
"wms_srs" "EPSG:4326"
END
TYPE LINE #DBから生成するのは線
STATUS ON #表示
CLASS
COLOR 200 200 200 #色
SIZE 2 #太さ2
# OUTLINECOLOR 0 0 255
END
END

END # Map File

WMS_ONLINERESOURCE とか、どうでもいいものは
そのままの値にしているものも多数あります。
このファイルをcmtest.mapとして保存し、
これを指定してブラウザからアクセスします。
私の環境ではこんな感じです。
フルパスじゃなくてもいいのかもしれません。

http://192.168.2.2/~mage/cgi/ms?map=/home/mage/www/mapworkshop/cmtest.map&service=WMS&request=getmap&layers=cmtest&version=1.1.1&format=image/png&width=450&height=450&srs=EPSG:4326&STYLES=default&bbox=138.9516,35.1238,140.2204,36.01

引数をかなりきちんとしないと怒られます。
だめなときはエラーのxmlを吐いてくれたり、真っ白で応答します。
上記でURLから省略できるものは無いぐらいです。
bboxとWidth/Heightがあわなくても真っ白が返ってきます。
背景色をなんとなく青い色にしたので成功したら青っぽく見えます。




WMS pluginのサーバに指定



JOSMの背景にこれを読み込んでみます。
JOSMを起動して、環境設定でWMSプラグインに
http://192.168.2.2/~mage/cgi/ms?map=/home/mage/www/mapworkshop/cmtest.map&service=WMS&request=getmap&layers=cmtest&version=1.1.1&format=image/png&STYLES=default&
を追加します。
名前はなんでもいいです。今回はubuntuにしました。

通常通りデータのある位置をOSMからダウンロードして、WMSメニューからMapServerのサーバを指定します。


と青っぽい背景になったら成功です。

データレイヤーを非表示にすると、海岸線が読み込めていることがわかります。



たいへんおつかれさまでした。
ちゃんと、移動に追従して日本中海岸線が読み込めていると思います。

0 件のコメント:

コメントを投稿