Category Archives: wms - Page 2

ms4w-3.0.6でのoverlayについて

ms4w-3.0.6でのoverlayについて

OpenLayersで電子国土地図とms4wのoverlayで、簡単にms4w-3.0.6に表示できるなどと書きましたが、Mapserver 6になってずいぶんと使いかってが変わりました。
すいません、簡単ではありません。

WMSの違い

まず、Maperver 6.0.3のwmsの記述ですが、

  WEB
    METADATA
      "wms_title" "WMS Server"
      "wms_onlineresource" "http://localhost/cgi-bin/mapserv.exe?map=c:/ms4w/Apache/htdocs/mapserver/example05/example4.map&"
      "wms_srs" "EPSG:4326 EPSG:900913"
      "ows_enable_request" "*"
      #"wms_enable_request" "*"
    END

となります。
wmsサービスを開始するためには、“ows_enable_request” “*”あるいは“wms_enable_request” “*”が必要になります。

表示してみる

OpenLayersで電子国土地図とms4wのoverlayのmap file とサンプルhtmlを表示させると

blog.godo-tys.jp_wp-content_gallery_ms4w306_image03.jpg
表示できない例

なんで表示でいきないのか?
悩みました。
OSGeo Japan Local Chapterへ投稿して解決しました。
Tank you so much for jeff

なんと、EPSG:900913はOfficalでないから使えないということでした。
正しくはEPSG:3857です。
皆さん、これは非常に大事なことですよ。
忘れずに、メモっておきましょう。

再度表示してみる

jeffさんの助言を元にmap fileとhtmlファイルを修正します。
ここでは、基盤地図25000とGoolemapに神奈川県のShape fileをoverlayしてみます。

map fileは、

MAP

  WEB
    METADATA
      "wms_title" "WMS Server"
      "wms_onlineresource" "http://localhost/cgi-bin/mapserv.exe?map=c:/ms4w/Apache/htdocs/mapserver/example05/example4.map&"
      "wms_srs" "EPSG:4326 EPSG:3857"
      "ows_enable_request" "*"
      #"wms_enable_request" "*"
    END
    IMAGEPATH "/ms4w/tmp/ms_tmp/"
    IMAGEURL "/ms_tmp/"
  END

  # データフォルダを相対パスで指定
  SHAPEPATH   "../data"

  # フォントフォルダを相対パスで指定
  FONTSET "../fonts/fonts.list"

  # シンボルフォルダを相対パスで指定
  # version6からsymbolの書式が変更されました。
  # とりあえず未使用にしておきます。
  #SYMBOLSET "../symbols/symbols6.sym"

  PROJECTION
    "init=epsg:4326" # WGS84
  END

#神奈川県 標高raster
  LAYER
    NAME "height"
    TYPE RASTER
    DATA "c14_ras2qgs.tif"
    STATUS OFF   #DEFAULT  #OFF #ON
    TRANSPARENCY 100
  END

#神奈川県 市区町村界vector
  LAYER
    NAME "region"
    DATA c14_region
    STATUS ON  #DEFAULT
    TYPE POLYGON
    TRANSPARENCY 70

    CLASS
      STYLE
        OUTLINECOLOR 255 0 0  #255 215 0
        COLOR -1 -1 -1   #240 230 140
        WIDTH 2.0
      END
    END
  END

#主要道路
  LAYER
    NAME "road"
    DATA c14_road
    STATUS OFF   #DEFALUT #OFF
    TYPE LINE

    CLASS
      STYLE
        COLOR 255 128 0
        WIDTH 2.0
      END
    END
  END

END

ここで、Map server入門 – FOSS4G 2012 Hokkaidoを参考にしました。
先人に感謝します。

また、symbolの書き方も大きく変わっているようなので、symbolの読み込みもとりあえず使わないようにしておきます。

で次にhtmlファイルですが、

<html>
<head>
<script type="text/javascript" src="http://localhost/OpenLayers-2.12/OpenLayers.js" charset="UTF-8"></script>
<script src="http://maps.google.com/maps/api/js?v=3.9&amp;sensor=false"></script>
<script>
function init() {
  var options = {
      //projection: new OpenLayers.Projection("EPSG:900913"),
      projection: new OpenLayers.Projection("EPSG:3857"),
      maxResolution:156543.0339,
      maxExtent: new OpenLayers.Bounds(-20037508.3427892,-20037508.3427892,20037508.3427892,20037508.3427892),
	  units: "m",
      controls: [
          new OpenLayers.Control.PanZoomBar(),
          new OpenLayers.Control.LayerSwitcher(),
          new OpenLayers.Control.Permalink(),
          new OpenLayers.Control.Attribution(),
          new OpenLayers.Control.Navigation()
        ],
      numZoomLevels: 18,
      displayProjection: new OpenLayers.Projection("EPSG:4326")
    }
 
  // マップ生成
  var map = new OpenLayers.Map("map",options);
  map.div.style.backgroundColor = 'rgb(255,255,255)';
 
  var kibantms = new OpenLayers.Layer.TMS(
      "基盤地図情報",
      "http://www.finds.jp/ws/tmc/",
      {
        layername: "KBN25000ANF-900913",
        type: "png",
        attribution: '<a target="_blank" href="http://www.finds.jp/wsdocs/kibanwms/index.html.ja">基盤地図情報(平20業使、第449号)</a>',
        isBaseLayer: true
      }
    );
 
    //背景地図レイヤーをGooglemap道路地図を追加
    var gmaplayerRoad = new OpenLayers.Layer.Google(
            "道路地図",
            {numZoomLevels: 20},
            {visibility: true}
    );
 
    var pntms = new OpenLayers.Layer.TMS(
          "地名",
          "http://www.finds.jp/ws/tmc/",
          {
            layername: "pntms-900913",
            type: "png",
            attribution: '<a target="_blank" href="http://www.finds.jp/wsdocs/pnwms/index.html.ja">地名WMS</a>',
            isBaseLayer: false
          }
    );
 
    var regionlayer = new OpenLayers.Layer.WMS( "市区町村界",
            "http://localhost/cgi-bin/mapserv.exe",
            {
              map : "c:/ms4w/Apache/htdocs/mapserver/example05/example4.map",
              layers: "region",
              format: "image/png",
              transparent: true
            }, {
              isBaseLayer : false   //true
            }
    );
 
    var roadlayer = new OpenLayers.Layer.WMS( "主要道路",
            "http://localhost/cgi-bin/mapserv.exe",
            {
              map : "c:/ms4w/Apache/htdocs/mapserver/example05/example4.map",
              layers: "road",
              format: "image/png",
              transparent: true
            }, {
              isBaseLayer : false   //true
              //projection: new OpenLayers.Projection("EPSG:4326")
            }
    );
 
 
  // マップにレイヤを追加
  map.addLayers([gmaplayerRoad, kibantms, pntms, regionlayer, roadlayer]);
 
  if( !map.getCenter() ) {
    var lonlat = new OpenLayers.LonLat(139.35, 35.40);
    lonlat.transform(map.displayProjection,map.getProjectionObject());
    map.setCenter(lonlat, 8);
  }
}
</script>
</head>
<body onload="init()">
<div id="map" style="width: 600px; height: 480px;"></div>
<p>出典: 基盤地図情報,国土数値情報(行政区画),位置参照情報</p>
 
</body>
</html>

基盤地図情報とGooglemapをbasemapとしてwmsのデータをoverlayさせます。

blog.godo-tys.jp_wp-content_gallery_ms4w306_image04.jpg
overlay成功!!

なんと、この4日間はなんだったんだ!!

まとめ

  1. Mapserver5 からMapserver6への移行はいろいろと注意が必要で、簡単に動きません。
  2. EPSG:900913が使えない。EPSG:3857に変更 重要
  3. wmsサービス開始に、”ows_enable_request” “*” or “wms_enable_request” “*”が必要

でしょうか。
もっとあるのでしょうが、現在私がわかっている部分はこのくらいでしょうか。

OSGeo Japan Local Chapterで私の投稿に書き込んでくださった皆様に感謝します。

なんだか、MapWinGISがすっかり置き去りになっているようで。

[Cpater 1]今日にでも開始します。

2 / 3123

Social Widgets powered by AB-WebLog.com.