Tuesday, September 10, 2013

技術|MapServerでWeb Mapping Serviceの動作テスト(OSX 10.8.4)

MapServerマイスターまでの道のりは遠いのですが、千里の道も一歩から。大抵3歩目くらいであきらめがちですが、四の五を言わず歩いてみましょう。

英語は血と汗を投入して読みました。一緒にいかがでしょうか。

1.参考情報


▼参考書

Tyler Mitcbell, Web Mapping Illustrated, O'REILLY 2008  *気合い!
→基本は、参考書であるWeb Mapping IllustratedのChapter 11を写経します。

▼Web(OSX 10.8でApacheを動かす方法)

Install and configure Apache, MySQL, PHP and phpMyAdmin on OSX 10.8 Mountain Lion



2.練習用シェープファイルのダウンロード


まず練習のための地図データ(シェープ形式)をダウンロードします。もちろん参考書に掲載されているworlddataです。

▼ダウンロード元

freegis_worlddata-0.1_simple.tar.gzを落として解凍しましょう。 

http://ftp.intevation.de/freegis/worlddata/


このファイルの中に、coutries_simpleと名前のついた.shp、.dbf、shxの3種類が格納されています。シェープファイルはこの3種類で1セットを構成します。shpファイルに図形の座標、dbfファイルに属性情報(建物名とか)、shxファイルには図形の座標と属性情報の対応関係がそれぞれ保存されています。


3.mapfileの作成


MapServerはこのmapfileの定義によって、地図を整形して呼び出します。今回、参考書のChapter 11の最終形を紹介しますので、ブルガリア近辺が描写されるかと思います。

▼mapfileの内容(global.map)

MAP
 SIZE 600 300
 EXTENT -180 -90 180 90
 IMAGECOLOR 180 180 250

 UNITS DD

 SCALEBAR
  STATUS EMBED
  UNITS KILOMETERS
  INTERVALS 3
  TRANSPARENT TRUE
  OUTLINECOLOR 0 0 0
 END


 LEGEND
  STATUS EMBED
  POSITION LR
  TRANSPARENT TRUE
 END


 WEB
  TEMPLATE global.html
  IMAGEPATH "/Library/WebServer/Documents/tmp/"
  IMAGEURL "/tmp/"
 END


 LAYER
  NAME countries
  TYPE POLYGON
  STATUS DEFAULT
  DATA countries_simpl
  LABELITEM 'NAME'
  LABELMAXSCALE 50000000
  CLASSITEM 'NAME'
  CLASS
   NAME 'Bulgaria'
   EXPRESSION 'Bulgaria'
   OUTLINECOLOR 100 100 100
   COLOR 255 255 150
   LABEL
    SIZE LARGE
    OUTLINECOLOR 255 255 255
    MINFEATURESIZE 40
   END
  END 
  CLASS
   NAME 'All Countries'
   EXPRESSION ('[NAME]' ne 'Bulgaria')
   OUTLINECOLOR 100 100 100
   COLOR 200 200 200
  END
 END
END


4.index.htmlの作成


参考書では、index.htmlのボタンを押すことでMapServerに必要な引数を渡し、指定したmapfileを読み込む仕掛けになっています。まずは、index.htmlを作成しましょう。

▼index.htmlの内容

<HTML>
<HEAD><TITLE>MapServer Test</TITLE></HEAD>
<BODY>
<CENTER><H2>MapServer Test</H2>


<FORM method=GET action="/cgi-bin/mapserv">
<INPUT type="hidden" name="map" value="/Library/WebServer/Documents/global.map">
<INPUT type="hidden" name="layer" value="countries">

<INPUT type="hidden" name="zoomdir" value=1>
<INPUT type="hidden" name="zoomsize" value=2>

<INPUT type="hidden" name="program" value="/cgi-bin/mapserv">

<INPUT type="submit" value="Start MapServer">
</FORM></CENTER>
</BODY>
</HTML>

▼(参考)MapServerの引数メモ

上記index.htmlで「Start MapServer」ボタンを押すと、URLには下記の引数が入力されます。引数は他にもありますので、ドキュメントで確認を。

http://localhost/cgi-bin/mapserv?map=%2FLibrary%2FWebServer%2FDocuments%2Ftoshima.map&layer=countries&zoomdir=1&zoomsize=2&program=%2Fcgi-bin%2Fmapserv

・mapfileの指定
 map=%2FLibrary%2FWebServer%2FDocuments%2Fglobal.map

・取得するレイヤー
 layer=countries

・クリック時のズームイン・アウトの指定(アウトの場合は-1です)
 zoomdir=1

・ズーム時の倍率
 zoomsize=2

・MapServerの位置
 program=%2Fcgi-bin%2Fmapserv


5.global.htmlの作成


index.htmlでボタンを押すと、引数がMapServerに引き渡され、global.mapを読み込みます。このglobal.mapから呼び出される地図表示用のページがglobal.htmlです。

▼global.htmlの内容

冒頭の「<!-- MapServer Template -->」は参考書には載っていませんが、MapServerの最新バージョンでは必要な記述なので、必ず入れます。

<!-- MapServer Template -->
<HTML>
<HEAD><TITLE>MapServer Test</TITLE></HEAD>
<BODY>
<CENTER><H2>MapServer Test</H2>
<HR>


<FORM method=GET action="/cgi-bin/mapserv">
<INPUT NAME="img" TYPE="image" SRC="[img]" width=600 height=300 border=0 ALT="Map Image">


<INPUT type="hidden" name="zoomdir" value=1 [zoomdir_1_check] >
<INPUT type="hidden" name="zoomsize" size=4 value=[zoomsize]>


<INPUT type="hidden" name="imgxy" value="[center_x][center_y]">
<INPUT type="hidden" name="imgext" value="[mapext]">
<INPUT type="hidden" name="map" value="[map]">
<INPUT type="hidden" name="savequery" value="true">
<INPUT type="hidden" name="mapext" value="shapes">


</FORM></CENTER></BODY></HTML>


6.apacheの起動


さて、OS X 10.8.4ではapacheはターミナルから手動で起動します。

▼apacheをターミナルから起動

username$ sudo apachectl start

localhost以下のルートディレクトリは標準では/Library/WebServer/Documentsになります。変更したければ、/private/etc/apache2/httpd.confでどうぞ。


7.地図画像の一時保管ディレクトリを作る


MapServerは動的にマップ画像を生成します。そのマップ画像を一時保管する先を作ります。

▼フォルダを作る

コマンドラインからでも、ファインダーからでも良いのですが、ルートディレクトリの下に、tmpディレクトリ(/Library/WebServer/Documents/tmp)を作ります。

▼パーミションの設定

これだけだとApacheからアクセスできないのでchomdなどで権限変更します。あくまで実験用です。
username$ sudo chmod 777 /Library/WebServer/Documents/tmp


8.各ファイルをルートフォルダに格納


index.html、global.html、global.map、シェープファイル3種1セットをルートディレクトリにセットします。


9.表示のテスト


ブラウザを開き、ローカルホストのURL(http://localhost)にアクセス。"Start MapServer"ボタンを押して地図が表示されれば成功です。

また、地図をクリックすると、その部分が拡大されます。今回、ズームアウトの設定はなく、ただ拡大するだけですが・・・。


10.そのほか


mapfileの構成が分かると、様々な表示のさせ方が実験できると思います。ぜひ実験してみてください。

No comments: