道路データ(数年前のデータで旧日本則地形)をGeoServerで配信してGoogleMap上に表示。
同様のことを電子国土でやった経験から簡単にできると思ったが、
意外にてこずり、時間がかかったのでメモ。
GeoServerの設定
特別な設定はしていない「Native SRS」、「Declared SRS」共に旧日本則地形を指定
※表示されない時はSRSを色々と変更したが、結局このまま。
OpenLayersのコード
GoogleMap、OSMをOpenLayersで表示する時はmapの投影にEPSG:900913を使用する。
但し、以下のように投影を敢えて明記せずに使用することがある。
もちろん、これは正しく動作する。
var map = new OpenLayers.Map('id_div_map');
var gmap = new OpenLayers.Layer.Google("Google ROADMAP",{numZoomLevels: 20});
map.addLayer(gmap);
しかし、ここにwmsのレイヤーを追加しても正しく表示されない。
OpenLayers.Mapに正しく投影の情報や最大のExtentを明示的に指定する必要がある。
var map = new OpenLayers.Map('id_div_map', {
maxExtent: new OpenLayers.Bounds(-20037508.34,-20037508.34,20037508.34,20037508.34),
maxResolution: 156543.0399,
numZoomLevels: "auto",
units: 'm',
projection: new OpenLayers.Projection("EPSG:4326"),
displayProjection: new OpenLayers.Projection("EPSG:900913")
});
var gmap = new OpenLayers.Layer.Google("Google ROADMAP",{numZoomLevels: 20});
map.addLayer(gmap);
var road = new OpenLayers.Layer.WMS("LOCAL_ROADS",
"http://192.9.200.25/geoserver/road/wms?",
{
LAYERS: 'road:ROAD5439',
format: 'image/png',
transparent: 'true',
isBaseLayer: 'false',
projection: 'EPSG:4301',
reproject: 'true',
styles: ''
});
map.addLayer(road);
※maxExtentに指定した値は(-180、-90)、(180、90)を座標変換した値
-20037508.34,-20037508.34,20037508.34,20037508.34
表示結果


