При создании проекта с использованием связки MapServer+OpenLayers возникла проблема с отображением карты в проекции отличной от epsg:4326. В частности, при использовании приведённого кода пропорции карты не изменяются по сравнению со случаем, когда настройки проекции слоя отсутствуют - только уменьшается изображение в целом (по всей видимости, отображаясь в прямоугольнике 180х360 метров). Собственно, первый вопрос такой: написанный код так и должен отрабатывать (и как тогда отобразить карту в проекции Меркатора), или должно быть по-другому?
html-файл:
Код: Выделить всё
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Test page</title>
<script src="js/OpenLayers/OpenLayers.js" type="text/javascript"></script>
<script src="js/jQuery/jquery.js" type="text/javascript"></script>
<script type="text/javascript">
// начальное позиционирование карты
var lon = 37.622975;
var lat = 55.746071;
var zoom = 5;
// переменные для карт и слоев
var map, layer;
//Начальная проекция:
var defaultProjection="EPSG:3395";
function init(){
map = new OpenLayers.Map({
div: 'map',
controls: [],
//projection: new OpenLayers.Projection(defaultProjection),
//displayProjection: new OpenLayers.Projection(defaultProjection),
tileSize: new OpenLayers.Size(256,256) //размер фрагмента карты
});
window.onunload = function (){ map.unloadDestroy();}; //функция принудительной отчистки памяти при выгрузке
layer = new OpenLayers.Layer.WMS( "Web MapServer",
"http://127.0.0.1:8080/cgi-bin/mapserv.exe",
{
format: 'aggpng24',
//map: '/ms4w/apps/example/wms_4mln_shp_200k.map',
map: '/ms4w/apps/example/wms_4mln_shp_200k_shp.map',
//map: '/ms4w/apps/example/wms_4mln_shp_200k_projection.map',
layers: 'sea,rga_color,dna,vga2,vga1,isl,ppa,coast,dnl,road,rrl,boundary,names,ppp,200k_ecw_all'
},
{
gutter: 0,
transitionEffect: 'resize',
//resolutions: [0.256,0.128,0.064,0.032,0.016,0.008,0.004,0.002,0.001,0.0005],
projection: new OpenLayers.Projection(defaultProjection),
units: 'meters',
maxExtent: new OpenLayers.Bounds(-20037508.34,-20037508.34,20037508.34,20037508.34),
maxResolution: 10000
});
map.addLayer(layer);
map.addControl(new OpenLayers.Control.LayerSwitcher());
map.addControl(new OpenLayers.Control.PanZoomBar());
map.setCenter(new OpenLayers.LonLat(lon, lat), zoom);
}
</script>
</head>
<body onload="init();">
<div id="map" class="mymap">
</div>
</body>
</html>
Код: Выделить всё
MAP
SIZE 256 256
SHAPEPATH "/ms4w/apps/example/4mln/shp/"
IMAGECOLOR 255 255 255
SYMBOLSET "./symbols/symbols35.sym"
FONTSET "./fonts/fonts.list"
PROJECTION
"init=epsg:3395"
END
WEB
METADATA
"wms_srs" "epsg:4326 epsg:3395"
END
END
OUTPUTFORMAT
NAME aggpng24
DRIVER AGG/PNG
MIMETYPE "image/png"
IMAGEMODE RGB
EXTENSION "png"
END
#<...> код отображения слоёв, проекции слоёв не заданы
END