Страница 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 КБ) 12858 просмотров
 
то щелкните по нему правой кнопкой, скопируйте адрес изображения. Он должен выглядеть примерно так:
это и есть запрос к 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