🗺️
MapserverでWMSサービスを構築する
前回、Mapserver環境を構築したので、今回は続きでWMSサービスの提供までを記載する。
(前回)
前提条件
Webで公開されているデータをそのまま利用してWMSサービスを提供する。
具体的にはダウンロードしたりせず、fuse(及びその派生)を利用してマウントして利用する。
s3ストレージのマウント
おそらくs3で提供されているならgoofysの一択。
ただ、今回はURLでのみ公開している場合もあるため、汎用性からhttp2fsを利用。
http2fsのインストール
# apt-get install -y httpfs2
使い方
# httpfs2 ${http_file} ${mountdir} -o allow_other -o default_permissions -o ro
具体例
# httpfs2 https://s3.ap-northeast-1.wasabisys.com/je-pds/cog/v1/JAXA.G-Portal_GCOM-C.SGLI_standard.L3-AROT.daytime.v3_global_daily/2018-01/01/0/E000.00-E180.00/E000.00-S90.00-E180.00-N90.00-AROT.tiff /mnt/je-pds/cog/v1/JAXA.G-Portal_GCOM-C.SGLI_standard.L3-AROT.daytime.v3_global_daily/2018-01/01/0/E000.00-E180.00/ -o allow_other -o default_permissions -o ro
# ls /mnt/je-pds/cog/v1/JAXA.G-Portal_GCOM-C.SGLI_standard.L3-AROT.daytime.v3_global_daily/2018-01/01/0/E000.00-E180.00/
E000.00-S90.00-E180.00-N90.00-AROT.tiff
mapserverの設定
postgisの設定
テーブルの作成
ポイントは2つ
- postgis extensionとpostgis_raster extensionを適用すること。
- テーブルにrasterデータを入れない場合、locationのカラムを作成すること。
# psql -U gis -h localhost -d mapserv -W
mapserv=# CREATE EXTENSION postgis;
mapserv=# CREATE EXTENSION postgis_raster;
mapserv=# CREATE TABLE wmap (id bigserial primary key, rast raster, geom GEOMETRY (POLYGON , 4326), filename text, location varchar);
データの投入
raster2pgsqlコマンドを利用して、http2fsでマウントしたrasterデータ(Geotiffファイル)をpostgisに投入する。
raster2pgsql -a -F -R -s 4326 /mnt/je-pds/cog/v1/JAXA.G-Portal_GCOM-C.SGLI_standard.L3-AROT.daytime.v3_global_daily/2018-01/01/0/E000.00-E180.00/E000.00-S90.00-E180.00-N90.00-AROT.tiff wmap > E000.00-S90.00-E180.00-N90.00-AROT.sql
psql -U gis -d mapserv -h localhost -f E000.00-S90.00-E180.00-N90.00-AROT.sql
mapファイルの作成
MAP
NAME "mapserver_wms"
IMAGETYPE png
EXTENT -180 -90 180 90 # <Lower Left X> <Lower Left Y> <Upper Right X> <Upper Right Y>
SIZE 800 800
PROJECTION
"init=epsg:4326"
END
OUTPUTFORMAT
NAME png
DRIVER 'GD/PNG'
MIMETYPE 'image/png'
IMAGEMODE RGBA
EXTENSION 'png'
TRANSPARENT ON
END
OUTPUTFORMAT
NAME GTiff
DRIVER "GDAL/GTiff"
MIMETYPE "image/tiff"
IMAGEMODE INT16
EXTENSION "tif"
TRANSPARENT ON
END
WEB
IMAGEPATH "/var/www/html/ms/"
IMAGEURL "http://192.168.xx.xx/ms/"
TEMPLATE "/var/www/html/wms_template.html"
METADATA
"wms_title" "wms_server"
"wms_abstract" "abstract"
"wms_srs" "EPSG:4326"
"wms_enable_request" "*"
"wms_getmap_formatlist" "image/png,image/tiff"
END
END
LAYER
NAME "png"
OFFSITE 255 255 255
STATUS ON
TYPE RASTER
DATA "/mnt/je-pds/cog/v1/JAXA.G-Portal_GCOM-C.SGLI_standard.L3-AROT.daytime.v3_global_daily/2018-01/01/0/E000.00-E180.00/E000.00-S90.00-E180.00-N90.00-AROT.tiff"
PROCESSING "BANDS=1"
PROCESSING "NODATA=65535"
PROCESSING "SCALE=AUTO"
PROJECTION
"init=epsg:4326"
END
METADATA
"wms_title" "wms_titleg"
"wms_getmap_formatlist" "image/png"
END
END
END
templateの作成
ブラウザで動作確認をするにはTEMPLATEの設定が必要な様なので簡易的なWMSを表示するHTML(TEMPLATE)を作成・保存する。
<!-- MapServer Template -->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/transitional.dtd">
<html>
<head>
<title>MapServer Template Sample</title>
</head>
<body>
MapServer Template Sample<br>
<img src="[img]">
</body>
</html>
動作確認
コマンドベースでの動作確認
mapservコマンドに-nhオプションをつけて、CUIベースで動作確認ができる。
ただし、PNG等のバイナリを応答するのでコンソールが文字化けるので注意。
% mapserv -nh "QUERY_STRING=map=/var/www/html/wms.map"
ブラウザでの動作確認
ブラウザにMapファイルを引数としたmapservを指定して、実行
http:/cgi-bin/mapserv?map=/var/www/html/wms.map
もしうまく動作しない場合などは、DEBUGファイルには出力されないようなので、apache2のアクセスログを見る、GetCapabilitiesを確認するなどをしてみる。
http:/cgi-bin/mapserv?map=/var/www/html/wms.map&SERVICE=WMS&REQUEST=GetCapabilities
WMSクライアント(QGIS)での動作確認
WMSクライアントにWMSサービスのエンドポイントを指定する。
WMSサービスのエンドポイントはブラウザでの動作確認で入力したURLになる。
http:/cgi-bin/mapserv?map=/var/www/html/wms.map
Discussion