2013年11月23日土曜日

21 - OpenLayers で東京都の地図を表示 1 - マップファイルの設定

21-1 東京都のマップファイルの設定
国土数値情報(東京都のデータ)と基盤地図情報(あきる野市)を同じ地図上に表示しました。
単位が、度数(degree)とメートル(meter)のデータです。

最初に、国土数値情報(東京都のデータ)の準備をするため、「OpenLayers 10a-d unitsがddとmeterのレイヤ」を参考に、nippon_nlni_tokyo_pgis.map に WMS サーバの設定をします。

1 OpenLayers では地図を表示するのに、マップファイルに MAP オブジェクトの PROJECTION オブジェクトが必要です。
epsg:4326(PROJECTION オブジェクトでは epsg を小文字で設定)は、X/Yの値で扱われるれる緯度と経度で地図を説明する一般的な識別子です。
これは、MapServer と OpenLayers のデフォルトの投影法である正距円筒図法ですが、必ず設定します。

2 WMS サーバ機能を設定するのに、WEB オブジェクトの METADATA オブジェクトに、 "wms_title" と "wms_srs", "wms_enable_request"(以上必須), "wms_onlineresource"(推奨 GetCapabilities のために) を設定します。
「wms_enable_request」は、GetCapabilities, GetMap, GetFeatureInfo and GetLegendGraphic のリクエストを許可します。
"wms_srs" に、基盤地図情報のに合わせて "EPSG:2451" も設定します。
これによって、"wms_srs" の識別子が WMS を利用できるすべてのレイヤに設定されます。
3 レイヤを WMS で利用できるように、同じように、METADATA オブジェクトに、 "wms_title" を設定します。
レイヤを別の投影法で利用したいときは、個別に "wms_srs" を設定します。

MAP
 NAME nippon_nlni_tokyo_pgis_map
 STATUS ON
 SIZE 600 300
 EXTENT 138.85 35.4 140 35.975 # 諸島部を除いた範囲
 UNITS DD
 IMAGECOLOR 255 255 255
# IMAGETYPE PNG
 FONTSET "fonts.txt"

 PROJECTION # 投影法 (OpenLayers のため追加)<-1
   "init=epsg:4326"
 END
 WEB
  IMAGEPATH "/home/user/mapsite/ms_tmp/"
  IMAGEURL "/mapsite/ms_tmp/"
  METADATA
   "wms_title" "Nippon NLNI Tokyo Map WMS Server" # WMS サーバ設定<-2
   "wms_srs" "EPSG:2451 EPSG:4326" # 投影法<-2
   "wms_onlineresource" "http://localhost/cgi-bin/mapserv?map=/home/user/mapfile/nippon_bmi_akiruno_pgis.map&" # <-2
   "wms_enable_request" "*" # <-2
  END
 END
---
 LAYER
  NAME tokyo_kuiki
---
  METADATA
   "wms_title" "Tokyo Kuiki Map WMS Layer" # <-3
  END
---
 LAYER
  NAME tokyo_pf
---
  METADATA
   "wms_title" "Tokyo Public Facilities Map WMS Layer" # <-3
  END
---


GetCapabilities で WMS の情報を取得できます。
警告(<!-- WARNING:...)がありますが、今回は地図の表示に影響ありません。

wget -O nippon_nlni_tokyo_pgis.xml "http://localhost/cgi-bin/mapserv?map=/home/user/mapfile/tokyo_pf_pgis.map&service=WMS&version=1.1.1&request=GetCapabilities"

user@debian:~/xml$ vim nippon_nlni_tokyo_pgis_111.xml
<?xml version='1.0' encoding="ISO-8859-1" standalone="no" ?>
<!DOCTYPE WMT_MS_Capabilities SYSTEM "http://schemas.opengis.net/wms/1.1.1/WMS_MS_Capabilities.dtd"
 [
 <!ELEMENT VendorSpecificCapabilities EMPTY>
 ]>  <!-- end of DOCTYPE declaration -->

<WMT_MS_Capabilities version="1.1.1">

<!-- MapServer version 6.0.1 OUTPUT=GIF OUTPUT=PNG OUTPUT=JPEG SUPPORTS=PROJ SUPPORTS=AGG SUPPORTS=CAIRO SUPPORTS=FREETYPE SUPPORTS=ICONV SUPPORTS=FRIBIDI SUPPORTS=WMS_SERVER SUPPORTS=WMS_CLIENT SUPPORTS=WFS_SERVER SUPPORTS=WFS_CLIENT SUPPORTS=WCS_SERVER SUPPORTS=SOS_SERVER SUPPORTS=FASTCGI SUPPORTS=THREADS SUPPORTS=GEOS INPUT=POSTGIS INPUT=OGR INPUT=GDAL INPUT=SHAPEFILE -->

ここには、MapServer がサポートする機能が出力されています。
WMS がサポートされています。

---
  <Layer>
    <Name>nippon_nlni_tokyo_pgis_map</Name>
    <Title>Nioopn NLNI Tokyo Map WMS Server</Title>
    <Abstract>nippon_nlni_tokyo_pgis_map</Abstract>
    <SRS>EPSG:4326</SRS>
    <SRS>EPSG:2451</SRS>
    <LatLonBoundingBox minx="138.85" miny="35.4" maxx="140" maxy="35.975" />
    <BoundingBox SRS="EPSG:4326"
                minx="138.85" miny="35.4" maxx="140" maxy="35.975" />
    <Layer queryable="0" opaque="0" cascaded="0">
        <Name>tokyo_kuiki</Name>
        <Title>Tokyo Kuiki Map WMS Layer</Title>
        <SRS>EPSG:4326</SRS>
        <LatLonBoundingBox minx="-2.5e+07" miny="-2.5e+07" maxx="2.5e+07" maxy="2.5e+07" />
        <BoundingBox SRS="EPSG:4326"
                    minx="-2.5e+07" miny="-2.5e+07" maxx="2.5e+07" maxy="2.5e+07" />
        <Style>
          <Name>default</Name>
          <Title>default</Title>
          <LegendURL width="139" height="23">
             <Format>image/png</Format>
             <OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" xlink:href="http://localhost/cgi-bin/mapserv?map=/home/user/mapfile/nippon_nlni_tokyo_pgis.map&version=1.1.1&service=WMS&request=GetLegendGraphic&layer=tokyo_kuiki&format=image/png&STYLE=default"/>
          </LegendURL>
        </Style>
        <ScaleHint min="0.249451424214819" max="498.902848429637" />
    </Layer>
---

      <Name>tokyo_pf</Name>
<!-- WARNING: Mandatory metadata '..._GROUP_TITLE' was missing in this context. -->
      <Title>tokyo_pf</Title>
      <Abstract>tokyo_pf</Abstract>
        <Style>
          <Name>default</Name>
          <Title>default</Title>
          <LegendURL width="87" height="23">
             <Format>image/png; mode=24bit</Format>
             <OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" xlink:href="http://localhost/cgi-bin/mapserv?map=/home/user/mapfile/nippon_nlni_tokyo_pgis.map&version=1.1.1&service=WMS&request=GetLegendGraphic&layer=tokyo_pf&format=image/png; mode=24bit&STYLE=default"/>
          </LegendURL>
        </Style>
      <Layer queryable="0" opaque="0" cascaded="0">
        <Name>tokyo_pf</Name>
        <Title>Tokyo Public Facilities Map WMS Layer</Title>
        <SRS>EPSG:4326</SRS>
        <LatLonBoundingBox minx="-2.5e+07" miny="-2.5e+07" maxx="2.5e+07" maxy="2.5e+07" />
        <BoundingBox SRS="EPSG:4326"
                    minx="-2.5e+07" miny="-2.5e+07" maxx="2.5e+07" maxy="2.5e+07" />
        <Style>
          <Name>default</Name>
          <Title>default</Title>
          <LegendURL width="87" height="23">
             <Format>image/png</Format>
             <OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" xlink:href="http://localhost/cgi-bin/mapserv?map=/home/user/mapfile/nippon_nlni_tokyo_pgis.map&version=1.1.1&service=WMS&request=GetLegendGraphic&layer=tokyo_pf&format=image/png&STYLE=default"/>
          </LegendURL>
        </Style>
        <ScaleHint min="0.249451424214819" max="12.4725712107409" />
      </Layer>
    </Layer>
---

GetMap リクエストで画像を表示してみます。
Webブラウザのアドレサバーに次のように入力してEnterキーを押します。

http://localhost/cgi-bin/mapserv?map=/home/user/mapfile/nippon_nlni_tokyo_pgis.map&service=WMS&version=1.1.1&request=GetMap&layers=tokyo_kuiki&srs=EPSG:4326&bbox=138.85,35.4,140,35.975&format=image/png&width=600&height=300









///// 補足 /////
次のアドレスを Web ブラウザのアドレスバーに入力して Enter キーを押すと、最初、地図が表示されませんでした。

http://localhost/cgi-bin/mapserv?map=/home/user/mapfile/nippon_nlni_tokyo_pgis.map&service=WMS&version=1.1.1&request=GetMap&layers=tokyo_kuiki

「mapserv」ファイルが作成されます。そこには、次のように記述されています。

<?xml version='1.0' encoding="ISO-8859-1" standalone="no" ?> <!DOCTYPE ServiceExceptionReport SYSTEM "http://schemas.opengis.net/wms/1.1.1/exception_1_1_1.dtd"> <ServiceExceptionReport version="1.1.1"> <ServiceException> msWMSDispatch(): WMS server error. WMS request not enabled. Check wms/ows_enable_request settings. </ServiceException> </ServiceExceptionReport>
nippon_nlni_tokyo_pgis.map の WEB オブジェクトに次のように追加しました。
---
 WEB
  IMAGEPATH "/home/user/mapsite/ms_tmp/"
  IMAGEURL "/mapsite/ms_tmp/"
  METADATA
   "wms_title" "Nippon NLNI Tokyo Map WMS Server"
   "wms_srs" "EPSG:2451 EPSG:4326"
   "wms_onlineresource" "http://localhost/cgi-bin/mapserv?map=/home/user/mapfile/nippon_bmi_akiruno_pgis.map"
   "wms_enable_request" "*" #追加
  END
 END
---


地図を表示すると次のようにメッセージが作成されるので、アドレスを修正していきました。

msWMSLoadGetMapParams(): WMS server error. Missing required parameter SRS
 -> srs=epsg:4326
msWMSLoadGetMapParams(): WMS server error. Missing required parameter BBOX
 -> bbox=-138.85,35.4,140,35.975
msWMSLoadGetMapParams(): WMS server error. Missing required parameter FORMAT
 -> format=image/png
msWMSLoadGetMapParams(): WMS server error. Missing required parameter WIDTH
 -> width=600
msWMSLoadGetMapParams(): WMS server error. Missing required parameter HEIGHT -> height=300
///// ここまで /////

0 件のコメント: