MapServer は オープンソース のサーバベースアプリケーションです。 WMS や WFS など OGC 標準 の地理情報の画像、ベクタデータ配信に使うことができます。
このクイックスタートでは以下の点について説明しています:
Mapfile は MapSrver の設定ファイルです。時空間データを、画像やベクタデータとしてレンダリングする際に使用します。このファイルでは主にレイヤを定義し、必要なデータをどこからどのように読み込み、どうやって表示するかを設定します。(色、シンボル、ラベル等)
MAP NAME "MAPSERVER QUICKSTART" EXTENT -137 29 -53 88 UNITS DD SHAPEPATH "/home/user/data/natural_earth/" SIZE 800 600 IMAGETYPE PNG24 PROJECTION "init=epsg:4326" END WEB METADATA ows_enable_request "*" END END LAYER NAME "Admin Countries" STATUS ON TYPE POLYGON DATA "10m_admin_0_countries" CLASS STYLE COLOR 246 241 223 OUTLINECOLOR 0 0 0 END END END END
mapfile の各オブジェクトは、 MAP のように名前で始まり、 END で終わります。 mapfile は常に MAP オブジェクトで始まり、 MapServer が読み込んで表示する LAYER オブジェクトのリストを持つべきです。今回はレイヤを一つだけ定義した mapfile になっています。
Note
使用できるプロパティの完全なリストは MapServer ドキュメントのページ Mapfile に記載されています。
MapServer はウェブアプリケーション用に作られていますが、コマンドラインからも画像を作成できます。これは何度も地図を作成してみたり、デバッグする際に便利です。
Applications/Accessories/Terminal からターミナルを開き、次のようにタイプしてください。
shp2img -m mapserver_quickstart.map -o mymap.png
コマンドの実行に成功すると、レンダリングした地図が file:///home/user/mymap.png に作成されます。
Note
ここでは、OGC WMS リクエストを使って、 mapfile から MapServer でレイヤをレンダリングする方法を学びます。
ブラウザを開き、以下の URL を入力してください
http://localhost/cgi-bin/mapserv?map=/home/user/mapserver_quickstart.map&SERVICE=WMS&REQUEST=Getmap&VERSION=1.1.1&LAYERS=Admin%20Countries&SRS=EPSG:4326&BBOX=-137,29,-53,88&FORMAT=PNG&WIDTH=800&HEIGHT=600
これは、 Web Map Service (WMS) の GetMap リクエストです。mapserver に「以下のマップファイルを使って指定したれレイヤを png 画像で、サイズ、レンダリングする地物、投影法等のパラメータを指定してレンダリングする」というリクエストをしています。
“&LAYERS=...” で指定した全てのレイヤのうち、 mapfile で STATUS ON のものと、 STATUS DEFAULT のレイヤをレンダリングします。このリクエストの結果は以下の様になります。
Note
リクエストにのパラメータは “?map=/home/user/mapserver_quickstart.map” を除いて全て WMS の仕様にあるものです。
Note
ここでは、mapfile に新しいレイヤを追加し、定義する方法について学びます
mapfile に新しいレイヤを追加します。mapfile にある最後の END ステートメントの直前に、以下のレイヤ設定を追加してください。:
LAYER
NAME "Lakes"
STATUS ON
TYPE POLYGON
DATA "10m_lakes"
CLASS
STYLE
COLOR 153 179 204
END
END
END
これで mapfile に二つ目のレイヤが追加できます。追加したレイヤは “STATUS ON” プロパティとなっています。これは、リクエストしない限りレンダリングしないことを意味します。
GetMap リクエストの内容を確認し、追加した “Lakes” レイヤの画像がレンダリングされるかどうかを確かめてみましょう。単純に “LAYERS” の引数に、追加したレイヤの名前を以下のように加えます。:
http://localhost/cgi-bin/mapserv?map=/home/user/mapserver_quickstart.map&SERVICE=WMS&REQUEST=Getmap&VERSION=1.1.1&LAYERS=Admin%20Countries,Lakes&SRS=EPSG:4326&BBOX=-137,29,-53,88&FORMAT=PNG&WIDTH=800&HEIGHT=600
MapSetver でレンダリングすると、先程の結果と良く似ていますが、追加した湖のレイヤを追加した画像になります。
Note
レイヤ内の要素を、データの属性によってスタイル変更する方法について学びます
mapfile では、レイヤオブジェクトはいくつでもクラスオブジェクトを追加できます。これは、データに含まれる要素のスタイル/見栄えの変更に使用します。例えば、 “10m_lakes” のデータを、 ogrinfo を使って見てみましょう。ジオメトリと属性の定義を見ることができます。これら属性値を使って各要素を描画する際に異なるクラスを割り当てられます。
“10m_lakes” のデータセットには、湖の大きさに関連すると思われる ScaleRank 属性があります。これをつかって湖をすこし違うようにレンダリングしてみましょう。レイヤオブジェクトの中に、既に作成したものに続けて、新しい CLASS オブジェクトを以下のように作成します。:
LAYER
NAME "Lakes"
STATUS DEFAULT
TYPE POLYGON
DATA "10m_lakes"
CLASSITEM "ScaleRank"
CLASS
EXPRESSION /0|1/
STYLE
COLOR 153 179 204
OUTLINECOLOR 0 0 0
END
END
CLASS
STYLE
COLOR 153 179 204
END
END
END
新しいクラスオブジェクトは、 MapServer に “ScaleRank” が “0” か “1” の時には、黒い境界線で書くように指示しています。
クラスオブジェクトは各フィーチャー(地物)を描画する際に、毎回上から順に読み込まれ、フィーチャーがクラスに指定した “EXPRESSION” と一致する属性を持つ場合、指定した方法でレンダリングを行います。フィーチャーがクラスに指定した条件と一致しないときには次のクラスのチェックに移り、全てのクラスをチェックして一致が無く、かつ最後のクラスが “EXPRESSION” を持たない場合には、そのクラスをデフォルトとして振る舞います。LAYER の “CLASSITEM” プロパティでは、そのクラスが EXPRESSION でチェックする属性を指定します。
この変更を加えると、大きな湖は黒い境界線で描くようになります。
Note
MapServer の様々な EXPRESSIONS について調べてみてください。
以上、大変簡単な例を紹介しました。まだまだできることはたくさんあります。MapSrver のプロジェクトウェブサイトに有用な情報を掲載しているので参考にして下さい。いくつかそのリンクを掲載しておきます。