先ほどのリスト2では1つのレイヤーとその中に1つのクラスしかありませんでしたが、複数のレイヤー・クラスを設定することができます。今回テーブルが1つないので、複数レイヤーを追加する意味がありません。まずは、複数のクラスを設定してみましょう。
クラスを複数設定する場合、EXPRESSION という属性を使用してレイヤー内で場合分けを行います。リスト3に示す例では、文京区のみを違うクラスとして定義して描画します。
リスト3
1 MAP
2
3 #### 省略####
4
5 LAYER
6 NAME “main”
7 CONNECTIONTYPE POSTGIS
8 CONNECTION “user=postgres password=pass dbname=phppro_sample host=localhost”
9 DATA “the_geom FROM gyosei”
10 TYPE POLYGON
11 STATUS ON
12 CLASS
13 EXPRESSION ([aac] != 13105)
14 COLOR 255 255 255
15 OUTLINECOLOR 0 0 255
16 SYMBOL 0
17 END
18 CLASS
19 EXPRESSION ([aac] = 13105)
20 COLOR 128 128 128
21 OUTLINECOLOR 0 0 255
22 SYMBOL 0
23 END
24 END
25 END
文京区の“gyosei.aac”の値は13105なので、文京区以外の場合、文京区の場合をそれぞれクラスとして定義します。その結果は図2のようになります。

図2 (画像をクリックすると別ウィンドウに拡大図を表示します)
このようにEXPRESSIONを使用してそれぞれの場合分けを行うのですが、MapServerの処理体系は上から順にクラスのEXPRESSIONの条件を適用し、合致するものがあればそれで描画する、というようになっています。そのため、1つめのクラスにEXPRESSIONを適用しない場合、すべてのデータが1つめのクラスで描画されてしまうので注意が必要です。
逆に最後のクラスにEXPRESSIONを適用しない場合は、それまでのクラスの条件に合致しないすべての場合、となります。
次に、新しく鉄道のラインデータを国土数値情報ダウンロードサービスのページからダウンロードして、鉄道のレイヤーを作成しましょう。ダウンロードとSQLの作成はすでに説明したので、詳細については省略します。鉄道のファイルを変換すると2つのシェープファイルが作成されます。
N02-05_EB02が鉄道の情報で、N02-05_EB03が駅の情報になります。今回は鉄道の情報のみを使用します。リスト4に示すように鉄道の情報のレイヤーを追加することができます。
リスト4
1 MAP
2
3 ### 省略###
4
5 LAYER
6 NAME “main”
7 CONNECTIONTYPE POSTGIS
8 CONNECTION “user=postgres password=pass dbname=phppro_sample host=localhost”
9 DATA “the_geom FROM gyosei”
10 TYPE POLYGON
11 STATUS ON
12 CLASS
13 EXPRESSION ([aac] = 13105)
14 COLOR 128 128 128
15 OUTLINECOLOR 0 0 255
16 SYMBOL 0
17 END
18 CLASS
19 COLOR 255 255 255
20 OUTLINECOLOR 0 0 255
21 SYMBOL 0
22 END
23 END
24
25 LAYER
26 NAME “sub”
27 CONNECTIONTYPE POSTGIS
29 DATA “the_geom FROM railroad”
30 TYPE LINE
31 STATUS ON
32 CLASS
33 COLOR 128 128 128
34 OUTLINECOLOR 0 0 255
35 SYMBOL 0
36 END
37 END
38
39 END
この結果を図3に示します。このように情報ごとにレイヤーを追加していきます。

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