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を表示させると
なんで表示でいきないのか?
悩みました。
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&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させます。
なんと、この4日間はなんだったんだ!!
まとめ
-
Mapserver5 からMapserver6への移行はいろいろと注意が必要で、簡単に動きません。
-
EPSG:900913が使えない。EPSG:3857に変更 重要
-
wmsサービス開始に、”ows_enable_request” “*” or “wms_enable_request” “*”が必要
でしょうか。
もっとあるのでしょうが、現在私がわかっている部分はこのくらいでしょうか。
OSGeo Japan Local Chapterで私の投稿に書き込んでくださった皆様に感謝します。
なんだか、MapWinGISがすっかり置き去りになっているようで。
[Cpater 1]今日にでも開始します。
最近のコメント