../../_images/logo_mapserver.png ../../_images/OSGeo_project.png

MapServer クイックスタート

MapServer is an Open Source server based application that allows you to publish geographic map images and vector data through the Internet using OGC Standards such as Web Map Service (WMS), Web Feature Service (WFS) and Web Coverage Service (WCS).

Mapfile設定ファイルを使用してMapServerを設定する

注釈

何を学べますか? ここでは、Mapfileの概要と、MapServerがWMS要求を使用してシェープファイルをイメージとして処理できるように設定する方法について説明します。

Mapfileとは

Mapfile は、MapServerが空間データをイメージまたはベクタデータとしてレンダリングするために使用する設定ファイルです。その主な目的は、描画できるレイヤ、必要なデータの読み方、レンダリング方法(色、シンボル、ラベルなど)を定義することです。

はじめてMapfileを作成する

  1. 任意のテキストエディタを開きます(例 アプリケーション ‣ アクセサリ ‣ FeatherPad)。

  2. Create the file "mapserver_quickstart.map" at the following location: /home/user/mapserver_quickstart.map

    次の内容を入力します:

    MAP
      NAME "MAPSERVER_QUICKSTART"
      EXTENT -137 29 -53 88
      UNITS DD
      SHAPEPATH "/usr/local/share/data/natural_earth2/"
      SIZE 800 600
    
      IMAGETYPE PNG24
    
      PROJECTION
        "init=epsg:4326"
      END
    
      WEB
        METADATA
          ows_title "MapServer Quickstart"
          ows_enable_request "*"
          ows_srs "EPSG:4326 EPSG:25832 EPSG:25833"
        END
      END
    
      LAYER
        NAME "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
    

注釈

この例では、既にOSGeoLive上の ~/data/natural_earth2 (/usr/local/share/data/natural_earth2 へのショートカット)にある自然地球データセットを使用しています。

Mapfile内の各オブジェクトは、名前(MAP など)で始まり、 END で終わります。Mapfileは常に MAP オブジェクトで始まり、Mapfileが読み取って描画できる LAYER オブジェクトのリストを含む必要があります。このMapfileでは、いまのところ1つのレイヤのみが定義されています。

Mapfileで定義されているオブジェクト(およびプロパティ)をいくつか見てみましょう。

  • EXTENT:この設定のデフォルトの空間境界ボックスを設定します。

  • LAYER: 空間データセットのアクセスプロパティと表示プロパティを定義します。レイヤは後で追加します。

  • SHAPEPATH: sets a base path for file-based data (e.g. shapefiles or GeoTIFF images).

Mapfileの LAYER をよく見ると、このファイルにはたくさんのプロパティーとオブジェクトも含まれていることがわかります。その中には次のようなものがあります

  • STATUS: レイヤを描画できる(ON)か、描画できない(OFF)か、常に描画する(DEFAULT)かを定義します。

  • TYPE: MapServerがデータをイメージとしてレンダリングするときに使用するジオメトリタイプ。このMapfileでは、データは ポリゴン として描画されます。

  • DATA:このレイヤが使用する空間データファイル(この場合はシェープファイル)の名前。

  • CLASS: レイヤの描画方法(スタイル設定)を決定します。このオブジェクトについては、後で詳しく説明します。

注釈

Mapfileで使用できるオブジェクトとプロパティの完全なリストは、 MapServerドキュメントページ にあります。

WMSの GetMap 要求を使用してMapServerで地図イメージをレンダリングする

注釈

何を学べますか? OGC WMS要求を使用して、MapServerを使用してMapfileからレイヤを含むイメージをレンダリングする方法を学習します。

Webブラウザを開き、次のURLを入力します。

http://localhost/cgi-bin/mapserv?map=/home/user/mapserver_quickstart.map&SERVICE=WMS&REQUEST=Getmap&VERSION=1.1.1&LAYERS=Countries&STYLES=&SRS=EPSG:4326&BBOX=-137,29,-53,88&FORMAT=PNG&WIDTH=800&HEIGHT=600

上記はどういう意味ですか? 簡単に言うと、これは Web Map Service (WMS)GetMap 要求であり、 "次のMapfileを使用して、イメージサイズ、地理的範囲、投影などのユーザ指定のパラメータに基づいて、指定されたレイヤをpngイメージとしてレンダリングする" ようMapServerに指示します。Mapfileで STATUS ON を持つ "&LAYERS=..." プロパティで指定されたすべてのレイヤは、 STATUS DEFAULT を持つすべての画層に加えてレンダリングされます。結果は次のようになります。

../../_images/mapserver_map.png

注釈

要求のすべてのパラメータは、MapServer固有の "?map=/home/user/mapserver_quickstart.map" を除き、WMS固有です。

コマンドラインを使用してMapServerで地図イメージをレンダリングする

MapServerはウェブアプリケーション向けだが、コマンドラインで画像を生成することもできます。これは、反復マッピングを探している場合やデバッグ中に便利です。

ターミナルを開き(Applications ‣ System Tools ‣ Terminal Emulator)、次のように入力します。

map2img -m /home/user/mapserver_quickstart.map -o /home/user/Documents/mymap.png

このコマンドが正常に実行されると、file:///home/user/mymap.png でレンダリングされたマップを表示できます。

新しいレイヤをMapfileに追加して、ローカルシェープファイルを提供する

注釈

何を学べますか? 新しいレイヤオブジェクト定義を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に2つのレイヤ定義が作成されました。ここで追加した新しいオブジェクトの "STATUS" プロパティが "ON" に設定されていることに注意してください。具体的にお願いしないと出せないということですね。

前述のWMSの GetMap 要求を受け取り、レンダリングしたイメージに新しい "Lakes" レイヤを追加します。 "LAYERS" プロパティリストに新しいレイヤ名を追加するだけです。

http://localhost/cgi-bin/mapserv?map=/home/user/mapserver_quickstart.map&SERVICE=WMS&REQUEST=Getmap&VERSION=1.1.1&LAYERS=Countries,Lakes&STYLES=&SRS=EPSG:4326&BBOX=-137,29,-53,88&FORMAT=PNG&WIDTH=800&HEIGHT=600

MapServerによってレンダリングされたイメージは、前のマップに似ていますが、新しいレイヤから湖が追加されています。

../../_images/mapserver_lakes.png

マップファイル設定を使用してレイヤのスタイルを設定する

注釈

何を学ベますか? レイヤ内の要素のスタイル設定の例が、データプロパティの一部に応じて表示されます。

In a Mapfile, a LAYER object can contain an infinite number of CLASS objects. These are used to style the elements contained in the spatial data file (DATA). For example, if we look closer at our "ne_10m_lakes" data file using a tool such as ogrinfo, we'll see the geometry and attribute definitions it contains. These attribute values can be used as a way to draw the elements inside a dataset differently using multiple CLASS objects.

In our "ne_10m_lakes" dataset, we have a ScaleRank attribute, which defines the significance of the lakes. We can use this as a way to render the lakes differently. In the LAYER object, we'll add another CLASS object just before our current one:

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

新しいCLASSオブジェクトは何をしますか?基本的には、MapServerに対して、 "0" または "1" に等しい "ScaleRank" プロパティを持つ要素を黒いアウトラインで描画するように指示します。クラスオブジェクトは、描画されるフィーチャごとに常に上から下に読み込まれます。フィーチャがクラスで指定された "EXPRESSION" に一致すると、そのクラスはフィーチャをレンダリングします。フィーチャがクラスと一致しない場合、次のクラスがチェックされます。フィーチャがどのクラスとも一致しない場合、フィーチャはまったくレンダリングされませんが、レイヤの最後のクラスにEXPRESSIONが含まれていない場合、そのクラスがデフォルト値として機能します。LAYERの "CLASSITEM" プロパティは、CLASSオブジェクトで定義された式を評価するときに使用する属性をMapServerに伝えます。

この新しい追加の結果、地図イメージ内の大きな湖が黒いアウトラインでレンダリングされます。

../../_images/mapserver_lakes_scalerank.png

注釈

MapServerの EXPRESSIONS の詳細をご覧ください。

データをOGC WMS(Web Map Service)としてパブリッシュする

MapServerは、OGC WMS、WFS、WCSなど、さまざまなOGC標準をサポートしています。OGC WMSを使用すると、データをマップサービスとしてパブリッシュし、QGISのようなデスクトップGISや、OpenLayersやMapbenderのようなWebクライアントでサービスを統合できます。

QGISデスクトップを使用したOGC WMSのロード

  1. Geospatial ‣ Desktop GIS ‣ QGIS Desktop からQGISを起動します

  2. Layer ‣ Add Layer ‣ Add WMS/WMTS Layer に移動します。

  3. ボタン New をクリックし、名前とサービスURLを追加します。

  4. 設定を保存します。

    http://localhost/cgi-bin/mapserv?map=/home/user/mapserver_quickstart.map&SERVICE=WMS&REQUEST=GetCapabilities&VERSION=1.3.0

その後、サービスに接続し、サービスの1つまたは複数のレイヤをQGISプロジェクトに追加できます。ID 0のレイヤを選択すると、すべてのレイヤを含むサービス全体を一度にロードできます。

../../_images/mapserver_load_wms_to_qgis.png

What next?

これは簡単な例ですが、できることはたくさんあります。MapServerプロジェクトのWebサイトには、作業を開始に役立つ多くのリソースが用意されています。次に、いくつかのをいくつか紹介しよう。