2019年9月25日水曜日

Debian 10 - 6 MapServer の設定

OpenLayers では、MapServer のデータを使用することは少ないですが、Web マッピングを理解するには良いガイドになります。
6-1 MapServer のインストール
インストールされていないときは、Synaptic パッケージマネージャで cgi-mapserver をインストールしてください。
Mapserver のバージョンは 7.2.2 です。

インストールの確認は、Web ブラウザに

http://localhost/cgi-bin/mapserv

と入力して Enter キーを押し、

No query information to decode. QUERY_STRING is set, but empty.

と表示されれば OK です。
もし、次のように表示されたら CGI が動作していません。


CGI のモジュールは /etc/apache2/mods-available/cgi.load ファイルです。

user@deb10-vmw:~$ su -
パスワード:
root@deb10-vmw:~# ls /etc/apache2/mods-available/
---
cgi.load
cgid.conf
cgid.load
---

このファイルが有効になっているかは /etc/apache2/mods-enable/ でわかります。

root@deb10-vmw:~# ls /etc/apache2/mods-enabled/

cgid.conf がないので有効にします。

root@deb10-vmw:~# a2enmod cgi
Your MPM seems to be threaded. Selecting cgid instead of cgi.
Enabling module cgid.
To activate the new configuration, you need to run:
  systemctl restart apache2

Apache2 を再起動してください。

root@deb10-vmw:~#  apachectl -k graceful
root@deb10-vmw:~# ls /etc/apache2/mods-enabled/
---
cgid.conf
cgid.load
---

Web ブラウザに

http://localhost/cgi-bin/mapserv

と入力して Enter キーを押し、

No query information to decode. QUERY_STRING is set, but empty.

と表示されれば OK です。


6-2 mapserver-bin gdal-binのインストール
MapServer を使用する上で便利なユーティリティソフトを Synaptic パッケージマネージャでインストールしておきます。

6-3 一時フォルダの作成
MapServerでは、表示するための画像が生成されますが、これを保存する一時保存フォルダを作成します。
次のように入力してEnterキーを押します。

root@deb10-vmw:~# exit
ログアウト
user@deb10-vmw:~$ cd public_html/
user@deb10-vmw:~/public_html$ mkdir ms_tmp

次のように入力すると所有者(オーナ)とグループが表示されます。

user@deb10-vmw:~/public_html$ ls -l
---
drwxr-xr-x 2 user user  4096  9月 18 14:38 ms_tmp
---

MapServerがこのフォルダに画像を保存できるようにするには、所有者とグループを Apache2 の実行ユーザの www-data にします。(rootで)
(/etc/apache2/envvars に
---
export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data
---
と記述があります。)

user@deb10-vmw:~/public_html$ su
パスワード:
root@deb10-vmw:/home/user/public_html# chown www-data:www-data ms_tmp

このフォルダの所有者とグループを確かめてみます。

root@deb10-vmw:/home/user/public_html# ls -l
---
drwxr-xr-x 2 www-data www-data  4096  9月 18 14:38 ms_tmp
---


6-4 動作確認
Demo Application の準備

MapServer Download ページ
http://mapserver.org/download.html

「Download」の「Demo Application」の「MapServer 5.4.x Demo」リンクをクリックしてダウンロードします。

root@deb10-vmw:/home/user/public_html# exit
exit
user@deb10-vmw:~/public_html$ cd ../ダウンロード
user@deb10-vmw:~/ダウンロード$ ls
---
workshop-5.4.zip
---

ダウンロードした workshop-5.4.zip を解凍します。

user@deb10-vmw:~/ダウンロード$ unzip workshop-5.4.zip
user@deb10-vmw:~/ダウンロード$ ls
---
workshop-5.4
workshop-5.4.zip
---

解凍した workshop-5.4 フォルダを public_html に移動します。

user@deb10-vmw:~/ダウンロード$ mv workshop-5.4/ ../public_html/
user@deb10-vmw:~/ダウンロード$ cd ../public_html/
user@deb10-vmw:~/public_html$ ls
index.html  ms_tmp  workshop-5.4

index.html のコードを修正します。

user@deb10-vmw:~/public_html$ cd workshop-5.4/
user@deb10-vmw:~/public_html/workshop-5.4$ ls
---
index.html
---
user@deb10-vmw:~/public_html/workshop-5.4$ vim index.html
---
The base data is the old-reliable Itasca dataset that we know and love...

<!-- EDIT THE FORM ACTION -->

<!--
<form name="demo" method="GET" action="/cgi-bin/mapserv54" onSubmit="configure()">
-->
<form name="demo" method="GET" action="/cgi-bin/mapserv" onSubmit="configure()">

<input type="hidden" name="layer" value="lakespy2">
<input type="hidden" name="layer" value="dlgstln2">
<input type="hidden" name="zoomsize" value=2>
<input type="hidden" name="map_web" value="">

<!-- EDIT THESE HIDDEN VARIABLES -->

<!--
<input type="hidden" name="map" value="/usr/local/www/docs_maps/mapserver_demos/workshop-5.4/itasca.map">
<input type="hidden" name="program" value="/cgi-bin/mapserv54">
<input type="hidden" name="root" value="/mapserver_demos/workshop-5.4">
-->
<input type="hidden" name="map" value="/home/user/public_html/workshop-5.4/itasca.map">
<input type="hidden" name="program" value="/cgi-bin/mapserv">
<input type="hidden" name="root" value="/~user/workshop-5.4">

---
itasca.map のコードを修正します。

user@deb10-vmw:~/public_html/workshop-5.4$ vim itasca.map
---
 WEB
  HEADER templates/header.html
  TEMPLATE "set in index.html"
  FOOTER templates/footer.html
  MINSCALE 1000
  MAXSCALE 1550000
  # change the next two lines to match your setup

# IMAGEPATH "/usr/local/www/docs_maps/tmp/"
# IMAGEURL "/tmp/"
  IMAGEPATH "/home/user/public_html/ms_tmp/" # 追加
  IMAGEURL "/~user/ms_tmp/" # 追加
  METADATA

   WMS_TITLE "UMN MapServer Itasca Demo"
   WMS_ABSTRACT "This is a UMN MapServer application for Itasca County located in north central Minnesota."
   WMS_ACCESSCONSTRAINTS "none"
   # change this value to match your setup
   WMS_ONLINERESOURCE "http://localhost.localdomain/mapserver_demos/itasca/index.html"
   WMS_SRS "EPSG:26915"
  END
 END
---


Webブラウザのアドレスバーに次のように入力してEnterキーを押します。
http://localhost/~user/workshop-5.4/index.html

ページが表示されたら 「Initialize」 ボタンをクリックします。


次のようなメッセージが表示されたました。

loadLayer(): Unknown identifier. Annotation Layers have been removed. To obtain same functionality, use a layer with label->styles and no class->styles

これは、TYPE annotation がなくなったためです。
MapServer のドキュメント「LAYER(http://mapserver.org/mapfile/layer.html#layer)」に次のようにあります。

Note: TYPE annotation has been deprecated since version 6.2. Identical functionality can be obtained by adding LABEL level STYLE blocks, and do not require loading the datasets twice in two different layers as was the case with layers of TYPE annotation.

TYPE annotation は、6.2 バージョン以降、非推奨になりました。同様の機能は、LABEL レベルの STYLE ブロックを追加することによって得られ、TYPE annotation のレイヤを使用した場合のように、2つの異なるレイヤにデータセットを2度ローディングする必要がありません。

itasca.map のコードで、次の3つのレイヤ ctyrdln3_anno、majrdln3_anno、mcd90py2_anno をすべてコメントアウトします。

---
#  LAYER
#    NAME ctyrdln3_anno
#    GROUP roads
#    MAXSCALE 300000
#    STATUS OFF
#    DATA ctyrdln3
#    TYPE ANNOTATION
---
#  LAYER
#    NAME majrdln3_anno
#    GROUP roads
#    MAXSCALE 600000
#    STATUS OFF
#    DATA majrdln3
#    TYPE ANNOTATION
---
#  LAYER
#    NAME mcd90py2_anno
#    GROUP cities
#    TYPE ANNOTATION
---

ctyrdln3_anno、majrdln3_anno、mcd90py2_anno のレイヤを次のように修正します。

---
  LAYER
    NAME mcd90py2
    GROUP cities
    TYPE POLYGON
    DATA mcd90py2
    STATUS OFF
    LABELITEM city_name # 追加 
    CLASSITEM city_name 
    CLASS
      NAME "Cities & Towns"
      EXPRESSION /./
      STYLE
        COLOR 255 225 90
      END
      LABEL # 追加
        COLOR 0 0 0
        SHADOWCOLOR 218 218 218
        SHADOWSIZE 2 2
        TYPE BITMAP
        SIZE MEDIUM
        POSITION CC
        PARTIALS FALSE
        BUFFER 2
      END # ここまで
      TEMPLATE "templates/mcd90py2.html"
    END
---
  LAYER
    NAME ctyrdln3
    GROUP roads
    MAXSCALE 300000
    STATUS OFF
    DATA ctyrdln3
    TYPE LINE
    LABELITEM "road_name" # 追加
    CLASS
      STYLE
        COLOR 0 0 0
      END
      LABEL # 追加
        MINFEATURESIZE 40
        MINDISTANCE 150
        POSITION CC
        SIZE TINY
        COLOR 0 0 0
        STYLE
          COLOR 255 255 255
          SYMBOL 'symbols/ctyhwy.png'
        END
      END # ここまで
---
  LAYER
    NAME majrdln3
    GROUP roads
    MAXSCALE 600000
    STATUS OFF
    DATA majrdln3
    TYPE LINE
    LABELITEM "road_num" # 追加
    CLASSITEM "road_class" # 追加
    CLASS
      NAME "Roads"
      STYLE
        COLOR 0 0 0
      END
      LABEL # 追加
        EXPRESSION "3"
        MINFEATURESIZE 50
        MINDISTANCE 150
        POSITION CC
        SIZE TINY
        COLOR 0 0 0
        STYLE
          COLOR 0 0 0 # dummy color
          SYMBOL 'symbols/sthwy.png'
        END
      END
      LABEL
        EXPRESSION "2"
        MINFEATURESIZE 50
        MINDISTANCE 150
        POSITION CC
        SIZE TINY
        COLOR 0 0 0
        STYLE
          COLOR 0 0 0 # dummy color
          SYMBOL 'symbols/ushwy.png'
        END
      END
      LABEL
        EXPRESSION "1"
        MINFEATURESIZE 50
        MINDISTANCE 150
        POSITION CC
        SIZE TINY
        COLOR 255 255 255
        STYLE
          COLOR 0 0 0 # dummy color
          SYMBOL 'symbols/interstate.png'
        END
      END # ここまで
    END
---

地図が表示されたら成功です。




0 件のコメント: