TOPシステム開発> 簡単な地図の作成
PHPプロ!マガジン
MapServerマスターへの道

第2回:MapServerで地図を表示してみよう

著者:アシアル  森川 穣   2007/1/22
1   2  3  次のページ
簡単な地図の作成

   データの用意までできたので、いよいよ地図の出力です。地図の出力はとても簡単で、リスト1に掲載するPHPファイルをlist1.phpとして保存し、同階層にリスト2に示す地図画像の設定用のファイル(Mapファイル)をlist2.mapという名前で保存します。
リスト1
1 <?php
2
3 // 東京都の緯度経度情報
4 $min_lon = 138.9; $min_lat = 35.45;
5 $max_lon = 140.0; $max_lat = 35.95;
6
7
8 // 設定ファイルからオブジェクトを作成する
9 $map = ms_newMapObj("./list2.map");
10 // 出力する画像サイズの設定
11 $map->setSize(800, 400);
12 // 地図画像に含まれる緯度経度の指定
13 $map->setExtent($min_lon, $min_lat, $max_lon, $max_lat);
14
15 // 保存する画像のパス
16 $image_file = dirname(__FILE__). “/mapimg/figure1.png”;
17 // 画像オブジェクトの作成
18 $img = $map->draw();
19 // 画像オブジェクトからファイルへの保存
20 $img->saveImage($image_file);
21
22 header("Content-type: image/png");
23 readfile($image_file);
24 ?>

リスト2
1 MAP
2     STATUS ON # 地図を表示するかどうか。当然ON
3     UNITS DD # この地図の単位(DD は緯度経度)
4     IMAGECOLOR 0 0 0 # 背景色R G B
5     FONTSET “./fontfile” # フォント用ファイル
6     IMAGETYPE PNG # 地図画像を保存する形式
7
8     SCALEBAR # スケールバーオブジェクトの開始
9         STATUS embed # スケールバーを地図内に埋め込むという意味
10         POSITION LL # 左下に表示
11         STYLE 1 # 0 か1 で表示方法を指定する
12         UNITS KILOMETERS # スケールバーの単位
13         SIZE 200 10 # スケールバーの大きさ(ピクセル)
14         COLOR 255 255 255 # スケールバーの色
15         #BACKGROUNDCOLOR 0 255 0 # STYLE が 0 の時に使用される
16         IMAGECOLOR 0 0 0 # スケールバーの背景色
17         INTERVALS 4 # 線の間隔の数
18
19         LABEL # ラベルオブジェクトの開始
20             COLOR 255 255 255 # 文字の色
21         END
22     END # スケールバーのオブジェクトの終了
23
24
25     LAYER
26         NAME “main”
27         CONNECTIONTYPE POSTGIS
28         CONNECTION “user=postgres password=pass dbname=phppro_sample host=localhost”
29         DATA “the_geom FROM gyosei”
30         TYPE POLYGON
31         STATUS ON
32         CLASS
33             COLOR 255 255 255
34             OUTLINECOLOR 0 0 255
35             SYMBOL 0
36         END
37     END
38 END

   また、文字を出力するためのフォントの設定ファイルをfontfileという名前で作成し、以下の1行を記述します。なお、フォントのファイルパスが異なる場合は、正しく指定してください。

gothic /usr/share/fonts/ja/TrueType/kochi-gothic-subst.ttf

   作成した画像ファイルを保存するディレクトリmapimgを作成して、Webサーバの実行ユーザから書き込みできるように設定します。

   以上で終了です。あとは、ブラウザからスクリプトを実行すれば、図1のような地図が出力されるでしょう。

図1
図1
(画像をクリックすると別ウィンドウに拡大図を表示します)


Mapファイル

   では前述のリスト2のMapファイルを詳しく見てみましょう。なお、Mapファイルのリファレンスは下記Webサイトから参照できます。


   まず、MapファイルはMAPオブジェクトを頂点とした、オブジェクトの階層構造で表現されます。それぞれのオブジェクトはオブジェクト名で開始され、ENDで終了します。リスト2ではMAPオブジェクトが頂点にあり、SCALEBARオブジェクト、LAYERオブジェクトがその下の階層にあります。さらにSCALEBARオブジェクトの下にはLABELオブジェクトがあり、それぞれのLAYERオブジェクトの下にはCLASSオブジェクトがあります。

   そして、オブジェクトの開始と終了の間に記述されている内容はオブジェクトの属性を指定しており、その値はPHPで使用するオブジェクトのメンバ変数になります。また、Mapファイルでは属性名やオブジェクト名に関して大文字小文字の区別はありませんが、PHPのメンバ変数は小文字なのでスクリプトから指定する場合は注意が必要です。

   これらのオブジェクトで一番重要なのはLAYERオブジェクトです。LAYERオブジェクトが実際の地図を表していると考えて良いでしょう。LAYERオブジェクト内には最低でも1つのCLASSオブジェクトが必要です。Mapファイルでは複数のLAYERオブジェクトを使用することで、レイヤーを重ね合わせた複雑な地図を表示することができます。なお、レイヤーは最大50個までしか使用できません。

   リスト2にはレイヤーが1つだけあります。このレイヤーでは全データについて描画を行っています。CLASSオブジェクトでその描画の設定を指定します。ここでは白で塗りつぶし、青で枠を描画しています。RGBの値を変更すれば色を変更することもできます。

   SCALEBARオブジェクトは、キロメーター単位のスケールバーを画像の左下に縦10ピクセル、横200 ピクセルで表示するように指定しています。POSITIONは1文字目にU(上)かL(下)、2文字目にはL(左)かC(中央)かR(右)を指定します。色は背景色が黒で、スケールバーが白です。

   文字の描画に関する設定はLABELオブジェクトで行います。LABELオブジェクトがないと、文字がMAPオブジェクトのIMAGECOLOR(地図の背景色)と同じ色で描画されてしまい、見えなくなってしまいます。ここではCOLORを指定して文字の色も白に指定します。

1   2  3  次のページ

アシアル株式会社 森川 穣
著者プロフィール
アシアル株式会社
森川 穣

高校まではPC・プログラミングとは無縁の生活を送っていたが、大学時代にプログラミングに目覚める。当時、主にC言語でのプログラミングを行っていた。大学4年時にアシアル株式会社にアルバイトとして入社。そこで初めてPHP言語でのプログラミングを覚え、会社に深く参画していく。「極める!PHP」や「超極める!PHP」、「WEB+DB PRESS」等、多数執筆。現在はオープンソースWeb地図作成ソフトMapServerを使った開発に力を入れている。


INDEX
第2回:MapServerで地図を表示してみよう
簡単な地図の作成
  レイヤー・クラスの追加
  FILTER