Страница 1 из 1
По работе с OpenLayers и MapServer
Добавлено: 23 окт 2008, 12:00
Сергей1972
Работаю над созданием картографического сервиса. Использую для генерации карты MapServer, а для отображения и управления OpenLayers.
Для вывода карты написал следующий код:
Код: Выделить всё
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>OpenLayers Basic Single WMS Example</title>
<link rel="stylesheet" href="OpenLayers-2.7/theme/default/style.css" type="text/css" />
<link rel="stylesheet" href="OpenLayers-2.7/examples/style.css" type="text/css" />
<script src="OpenLayers-2.7/OpenLayers.js"></script>
<script type="text/javascript">
var map, layer;
function init(){
map = new OpenLayers.Map( 'map' );
layer = new OpenLayers.Layer.WMS( "naspunkt",
"http://localhost/cgi-bin/mapserv.exe?map=/ms4w/apps/example/naspunkt.map&service=WMS", {layers: 'naspunkt'} );
map.addLayer(layer);
map.zoomToMaxExtent();
}
</script>
</head>
<body onload="init()">
<h1 id="title">Basic Single WMS Example</h1>
<div id="tags"></div>
<div id="shortdesc">Show a Simple Map</div>
<div id="map" class="smallmap"></div>
<div id="docs">
This example shows a very simple layout with minimal controls. This example uses a single WMS base layer.
</div>
</body>
</html>
Но почему-то отображается только белый фон, а не карта.
Пподключал как WMS-сервис в программе Qgis, карта отображается без проблем.
Где я сделал ошибку? Проекция слоя EPSG 4326.
Re: По работе с OpenLayers и MapServer
Добавлено: 23 окт 2008, 13:34
KolesovDmitry
Возможно дело в том, что при создании слоя не был указан параметр map -- путь к карте. Попробуйте добавить
Код: Выделить всё
{map: '/ms4w/apps/example/naspunkt.map', layers: 'naspunkt'}
На всякий случай привожу кусок кода, который я использую для связки MapServer и OpenLayers, может быть вам пригодится:
Код: Выделить всё
<script defer="defer" type="text/javascript">
// ************ Создаем карту ********************
var options = {
maxScale: 50000,
minScale: 20000000,
numZoomLevels: 20,
minResolution: "auto",
minExtent: new OpenLayers.Bounds(-1, -1, 1, 1),
maxResolution: "auto",
maxExtent: new OpenLayers.Bounds(2223898, 3499629, 20015086, 19949520 ),
projection: "epsg:900913",
units: "m"
};
var map = new OpenLayers.Map('map',options);
// ***************** Описываем слои ************************
var map_topo_path="/z/dj/map/topo/topo.map" //путь к map-файлу в дереве каталогов
var map_topo_url="http://192.168.3.12/map/mapserv?map="+map_topo_path+"&" //описание вызова через адр. строку
var Topo = new OpenLayers.Layer.WMS("Топооснова", map_topo_url, {map: map_topo_path, layers: 'Maro,Tero,...', format: 'gif'},{singleTile: true});
//var map=... определяем парам. след. слоя
//var Topo_2 = ... определяем еще слои...
map.addLayers([Topo,Topo_2,.....]);
// **************** Описываем инструементы *****************
var ctrl={
PnZm: new OpenLayers.Control.PanZoom(),
Swtchr: new OpenLayers.Control.LayerSwitcher({'ascending':false}),
KbdDf: new OpenLayers.Control.KeyboardDefaults(),
//MsPos: new OpenLayers.Control.MousePosition(),
Pnl: new OpenLayers.Control.Panel(),
PrmLnk: new OpenLayers.Control.Permalink()
};
for (var key in ctrl){
map.addControl(ctrl[key])
}
// ****************** Задаем начальное положение карты для показа ********************************
if (!map.getCenter()) map.zoomToMaxExtent();
</script>
Re: По работе с OpenLayers и MapServer
Добавлено: 29 июл 2009, 14:14
dixgrey
почти таже ситуация - только на экране появляется розовый прямоугольник вместо слоя, этот прямоугольник можно масштабировать двигать... но как получить слой? В QGis все нормально открывает.
map файл:
Код: Выделить всё
MAP
##VERSION 5.2.0
NAME "WMS"
STATUS ON
IMAGETYPE PNG
SIZE 512 512
EXTENT 0 -2610.423255 4209.988671 525.42148
SHAPEPATH "/ms4w/apps/minsk/shp/"
UNITS DD
IMAGECOLOR 255 255 255
WEB
TEMPLATE './tpl.html'
IMAGEPATH '/ms4w/tmp/ms_tmp/'
IMAGEURL '/ms_tmp/'
METADATA
wms_title "GIS-LAB Demo"
wms_abstract "This is the WMS demo from GIS-Lab"
wms_onlineresource "http://vmadmin/cgi-bin/mapserv.exe?map=/ms4w/apps/minsk/5js.map&"
wms_srs "EPSG:4326"
wms_onlineresource "http://vmadmin/cgi-bin/mapserv.exe?map=/ms4w/apps/minsk/5js.map&"
wms_getfeatureinfo "http://vmadmin/cgi-bin/mapserv.exe?map=/ms4w/apps/minsk/5js.map&"
wms_featureinfoformat "text/plain"
END
END
PROJECTION
"proj=latlong"
"ellps=WGS84"
"datum=WGS84"
END
LAYER
NAME "r_g1"
TYPE polygon
STATUS ON
DATA "C:\ms4w\apps\minsk\shp_all\r_g1"
TEMPLATE "dummy"
CLASSITEM "CLASS"
PROJECTION
"proj=latlong"
"ellps=WGS84"
"datum=WGS84"
END
CLASS
NAME "r_gg"
STYLE
COLOR 128 0 128
END
END
METADATA
wms_title "Countries 1"
wms_abstract "Countries 1 test"
wms_srs "EPSG:4326"
wms_include_items "all"
END
END
END
скрипт вызова:
Код: Выделить всё
<div id="map"></div>
<script type="text/javascript">
var map = new OpenLayers.Map('map');
var mappath="/ms4w/apps/minsk/5js.map"; //путь к map-файлу в дереве каталогов
var mapurl="http://localhost/cgi-bin/mapserv.exe";
var layer = new OpenLayers.Layer.WMS("GIS-Lab Test WMS",
mapurl, {map: mappath, layers: 'r_g1'},{'reproject': true});
map.addLayer(layer);
map.zoomToMaxExtent();
map.addControl(new OpenLayers.Control.LayerSwitcher({'ascending':false}));
</script>
Re: По работе с OpenLayers и MapServer
Добавлено: 29 июл 2009, 17:37
Mavka
- Будьте географом до конца и укажите нормальную СК, чтобу OL не гадал (тем более что вы задаете для слоя reproject)
Код: Выделить всё
var map = new OpenLayers.Map('map', {
units: 'degrees',
projection: new OpenLayers.Projection('EPSG:4326'),
maxExtent: new OpenLayers.Bounds(здесь ваш extent),
});
- Посмотрите в логах Apache (\ms4w\Apache\logs\access.log и error.log) идут ли запросы и с какими параметрами. Если ошибки у MapServer, то они выпадут здесь.
- Откройте свою карту в Mozilla Firefox и откройте "Консоль ошибок" (Инструменты > Консоль ошибок). Сюда скидывает ошибки OpenLayers.
- Раз вы работаете в WGS84, то лучше замените
на (широта/долгота - ваши, zoom - любой)
Код: Выделить всё
map.setCenter(new OpenLayers.LonLat(lon, lat), zoom);
P.S. А как можно нарисовать карту в EPSG:4326? Я думал нужна проекция...
Re: По работе с OpenLayers и MapServer
Добавлено: 29 июл 2009, 21:39
dixgrey
Mavka писал(а):-
P.S. А как можно нарисовать карту в EPSG:4326? Я думал нужна проекция...
EPSG:4326 - взял из примера, пока не знаю как можно по другому сделать, только учусь - суть такова, был шейп файл и мапфайл - делал сначала через шаблоны, потом для работы с OpenLayers сделал изменения в map файле для WMS (как тут в примере было указано) проверил в Qgis - все подключилось, подключил OpenLayers и вот тут застопорился - видно что оно подключается, раз какой-то прямоугольник появляется, он не сразу появился... но где-то ошибка, попробую сделать как вы посоветовали, может получится.
Re: По работе с OpenLayers и MapServer
Добавлено: 30 июл 2009, 09:15
Mavka
Если "розовый прямоугольник" выглядит так:
- ol-error.png (5.06 КБ) 12183 просмотра
то щелкните по нему правой кнопкой, скопируйте адрес изображения. Он должен выглядеть примерно так:
это и есть запрос к WMS серверу. Если его открыть в браузере, то увидете подробное описание ошибки, например:
"You don't have permission to access /suas/files/atlas/2/wms.php on this server."
Re: По работе с OpenLayers и MapServer
Добавлено: 30 июл 2009, 11:59
Konstantin Tokar
То же самое, и даже больше, можно увидеть в FireBug во вкладке Net. Наверно, в FAQ по OpenLayers надо включать оба этих способа отладки.
Re: По работе с OpenLayers и MapServer
Добавлено: 30 июл 2009, 17:34
Максим Дубинин
Konstantin Tokar писал(а):Наверно, в FAQ по OpenLayers надо включать оба этих способа отладки.
Конечно, давайте текст добавки, добавим (можно личным сообщением, чтобы тут не повторяться).
Re: По работе с OpenLayers и MapServer
Добавлено: 31 июл 2009, 13:03
dixgrey
получилось, карта появилось на экране... правда она почему-то большого размера и смещена вправо...
я так полагаю где-то координаты надо дополнительно прописать, пока не понял где и в каком формате...
где можно подробнее почитать про epsg:4326 или epsg:900913... что лучше использовать при работе с шейпами
Re: По работе с OpenLayers и MapServer
Добавлено: 31 июл 2009, 14:39
Mavka
Здесь подробно описана epsg:900913