Project logo OSGeo Project

MapServer クイックスタート

MapServer は オープンソース のサーバベースアプリケーションです。 WMSWFS など OGC 標準 の地理情報の画像、ベクタデータ配信に使うことができます。

このクイックスタートでは以下の点について説明しています:

MapServer を設定する

Note

ここでは、WMS リクエストを使って shp ファイルを画像として MapServer で配信するために必要な mapfile の設定について学びます。

Mapfile とは

Mapfile は MapSrver の設定ファイルです。時空間データを、画像やベクタデータとしてレンダリングする際に使用します。このファイルでは主にレイヤを定義し、必要なデータをどこからどのように読み込み、どうやって表示するかを設定します。(色、シンボル、ラベル等)

初めてのマップファイル作成

  1. テキストエディタを開いてください(Live DVD では、 Mousepad をインストールしてあります。メニューから Applications ‣ Accessories ‣ Mousepad を選択してください)
  2. ホームディレクトリに以下の内容で “mapserver_quickstart.map” を作成してください。 /home/user/mapserver_quickstart.map
MAP
  NAME "MAPSERVER QUICKSTART"
  EXTENT -137 29 -53 88
  UNITS DD
  SHAPEPATH "/home/user/data/natural_earth2/"
  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 "ne_10m_admin_0_countries"
    CLASS
      STYLE
        COLOR 246 241 223
        OUTLINECOLOR 0 0 0
      END
    END
  END

END

Note

この例では Natural Earth データセットを使用します。DVD の ~/data/natural_earth2 にインストールしてあります。( /usr/local/share/data/natural_earth2 にショートカットがあります)

mapfile の各オブジェクトは、 MAP のように名前で始まり、 END で終わります。 mapfile は常に MAP オブジェクトで始まり、 MapServer が読み込んで表示する LAYER オブジェクトのリストを持つべきです。今回はレイヤを一つだけ定義した mapfile になっています。

mapfile のオブジェクトやプロパティについて見てみましょう:
  • EXTENT : この設定でのデフォルト範囲の設定
  • LAYER : 時空間データセットへのアクセスと表示の設定を行います。後ほど別のレイヤを追加します。
  • SHAPEPATH : 表示したい shp ファイルや tiff 画像へのパスのベースとなるパス
mapfile の LAYER を詳しく見るとほかにも以下のようなプロパティを含んでいます。
  • STATUS : レイヤを表示する (ON)、表示しない (OFF) もしくは常に表示する (DEFAULT)
  • TYPE : MapServer がレンダリング画像として使用するジオメトリの種類。 作成した mapfile ではポリゴン (POLYGON) として表示します。
  • DATA : レイヤとして使用するファイルの名称。今回は shp ファイルを指定しています。
  • CLASS : レイヤを描画するスタイル。後程このオブジェクトについてより詳しく説明します。

Note

使用できるプロパティの完全なリストは MapServer ドキュメントのページ Mapfile に記載されています。

WMS の GetMap リクエストで地図画像をレンダリングする

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 のレイヤをレンダリングします。このリクエストの結果は以下の様になります。

../../_images/mapserver_map9.png

Note

リクエストにのパラメータは “?map=/home/user/mapserver_quickstart.map” を除いて全て WMS の仕様にあるものです。

コマンドラインから地図画像をレンダリングする

MapServer はウェブアプリケーション用に作られていますが、コマンドラインからも画像を作成できます。これは何度も地図を作成してみたり、デバッグする際に便利です。

Applications/Accessories/Terminal からターミナルを開き、次のようにタイプしてください。

shp2img -m mapserver_quickstart.map -o mymap.png

コマンドの実行に成功すると、レンダリングした地図が file:///home/user/mymap.png に作成されます。

shp ファイルを新しいレイヤとして追加する

Note

ここでは、mapfile に新しいレイヤを追加し、定義する方法について学びます

mapfile に新しいレイヤを追加します。mapfile にある最後の END ステートメントの直前に、以下のレイヤ設定を追加してください。:

LAYER
  NAME "Lakes"
  STATUS ON
  TYPE POLYGON
  DATA "ne_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

MapServer でレンダリングすると、先程の結果と良く似ていますが、追加した湖のレイヤを追加した画像になります。

../../_images/mapserver_lakes9.png

レイヤのスタイルを設定する

Note

レイヤ内の要素を、データの属性によってスタイル変更する方法について学びます

mapfile では、レイヤオブジェクトはいくつでもクラスオブジェクトを追加できます。これは、データに含まれる要素のスタイル/見栄えの変更に使用します。例えば、 “10m_lakes” のデータを、 ogrinfo を使って見てみましょう。ジオメトリと属性の定義を見ることができます。これら属性値を使って各要素を描画する際に異なるクラスを割り当てられます。

“ne_10m_lakes” のデータセットには、湖の大きさに関連すると思われる ScaleRank 属性があります。これをつかって湖をすこし違うようにレンダリングしてみましょう。レイヤオブジェクトの中に、既に作成したものに続けて、新しい CLASS オブジェクトを以下のように作成します。:

LAYER
  NAME "Lakes"
  STATUS ON
  TYPE POLYGON
  DATA "ne_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 でチェックする属性を指定します。

この変更を加えると、大きな湖は黒い境界線で描くようになります。

../../_images/mapserver_lakes_scalerank9.png

Note

MapServer の様々な EXPRESSIONS について調べてみてください。

次のステップ

以上、大変簡単な例を紹介しました。まだまだできることはたくさんあります。MapServer のプロジェクトウェブサイトに有用な情報を掲載しているので参考にして下さい。いくつかそのリンクを掲載しておきます。

  • MapServer の導入 - Introduction to MapServer.
  • MapServer チュートリアル - MapServer Tutorial より多くの mapfile の例を掲載しています。
  • OGC 準拠と設定 では WMS, WFS, SLD, WFS Filter Encoding, WCS, SOS など MapServer の OGC 標準屁の準拠について記載しています
  • MapServer が動作させられたら是非、コミュニティ メーリングリスト に参加してください。アイデアの交換やソフトウェアの性能向上などに関しての議論を行っています。