end0tknr's kipple - 新web写経開発

http://d.hatena.ne.jp/end0tknr/ から移転しました

mapservで国土交通省提供の行政区域データをcgiで表示

http://d.hatena.ne.jp/end0tknr/20110321/1300728621
先日のエントリに続いて(割と時間が経過していますが)、国土交通省提供の行政区域データをmapservで表示してみます。

gisデータのインポートは、例えば、次のurlをご覧下さい
http://d.hatena.ne.jp/end0tknr/20080830/1220079398
※mapserver-5.6.6 を使用しました
http://mapserver.org/cgi/index.html

設定内容

httpd.confの抜粋
 :
ServerRoot "/home/endo/local/apache22"
 :
Listen 8081
 :
ScriptAlias /smap/cgi /home/endo/dev/mapserver/cgi-bin
alias       /smap     /home/endo/dev/mapserver
/home/endo/dev/mapserver 以下の構成
cgi-bin/
  mapserv    makeしたmapserverのcgi
  test.map  
  test.html  template
tmp/         mapserverが表示画像を書き込みます
mapファイル (test.map)
MAP
  SIZE 500 500           #画像size
  EXTENT 135 36 142 40   #出力範囲の座標
  STATUS ON              #地図を表示するか
  UNITS DD               #地図の単位(DD は緯度経度)
  IMAGECOLOR 255 255 255 #背景色R G B
  IMAGETYPE PNG          #地図画像を保存する形式
  LAYER
    NAME "gyosei"
    CONNECTIONTYPE POSTGIS
    CONNECTION "user=postgres password='' dbname=smap host=localhost"
    DATA "the_geom FROM gyosei" #select文
    TYPE LINE
    STATUS ON
    CLASS
      COLOR 0 0 0
    END
  END
  WEB
    TEMPLATE test.html
    IMAGEPATH "/home/endo/dev/mapserver/tmp/"
    IMAGEURL "/smap/tmp/"
  END
END
template ( test.html )
<!-- MapServer Template --> <!-- ←このおまじないは必須 -->
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html>
<head>
<title></title>
</head>
<body>
<form name="mapserv" method="GET" action="/smap/cgi/mapserv">
<!-- HIDDEN MAPSERVER CGI VARIABLES -->
<input type="hidden" name="map" value="[map]">
<input type="hidden" name="layer" value="[layer]">
<input type="hidden" name="imgext" value="[mapext]">
<input type="hidden" name="imgxy" value="[center_x] [center_y]">
<input type="hidden" name="zoomdir" value="0">

<input type="image" name="img" src="[img]" style="border: 1px solid #000">
</form>
</body>
</html>

表示例

以上の設定を行うと、次のように表示され、画像をクリックすることで、地図をスクロールできます。

localhost:8081/smap/cgi/mapserv?map=test.map&layer=gyosei

templateには「 MapServer Template 」が必須

先程のtemplate ( test.html )のヘッダ部に「MapServer Template」と記載していますが、これがない場合、次のようなエラーになります。

Content-type: text/html isValidTemplate(): 
Web application error. 
Missing magic string, test.html doesn't look like a MapServer template.

tmp以下に表示する画像が大量に作成されます。

tmp以下には、mapservが、MS13021637233275.pngといった表示画像を大量に作成しますが、しょうがないのかな?