По работе с OpenLayers и MapServer

Mapserver, GeoServer, MapGuide, Google и другое ПО для веб-картографии
Ответить
Сергей1972
Новоприбывший
Сообщения: 1
Зарегистрирован: 23 окт 2008, 11:48
Репутация: 0

По работе с OpenLayers и MapServer

Сообщение Сергей1972 » 23 окт 2008, 12:00

Работаю над созданием картографического сервиса. Использую для генерации карты 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.

KolesovDmitry
Гуру
Сообщения: 810
Зарегистрирован: 22 авг 2007, 14:58
Репутация: 123
Откуда: Казань

Re: По работе с OpenLayers и MapServer

Сообщение KolesovDmitry » 23 окт 2008, 13:34

Возможно дело в том, что при создании слоя не был указан параметр 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>

dixgrey
Интересующийся
Сообщения: 32
Зарегистрирован: 22 июл 2009, 10:45
Репутация: 0
Контактная информация:

Re: По работе с OpenLayers и MapServer

Сообщение dixgrey » 29 июл 2009, 14:14

почти таже ситуация - только на экране появляется розовый прямоугольник вместо слоя, этот прямоугольник можно масштабировать двигать... но как получить слой? В 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>

Аватара пользователя
Mavka
Гуру
Сообщения: 2060
Зарегистрирован: 14 мар 2008, 17:36
Репутация: 9

Re: По работе с OpenLayers и MapServer

Сообщение Mavka » 29 июл 2009, 17:37

  1. Будьте географом до конца и укажите нормальную СК, чтобу OL не гадал (тем более что вы задаете для слоя reproject)

    Код: Выделить всё

    var map = new OpenLayers.Map('map', {
        units: 'degrees',
        projection: new OpenLayers.Projection('EPSG:4326'),
        maxExtent: new OpenLayers.Bounds(здесь ваш extent),
    }); 
  2. Посмотрите в логах Apache (\ms4w\Apache\logs\access.log и error.log) идут ли запросы и с какими параметрами. Если ошибки у MapServer, то они выпадут здесь.
  3. Откройте свою карту в Mozilla Firefox и откройте "Консоль ошибок" (Инструменты > Консоль ошибок). Сюда скидывает ошибки OpenLayers.
  4. Раз вы работаете в WGS84, то лучше замените

    Код: Выделить всё

    map.zoomToMaxExtent(); 
    на (широта/долгота - ваши, zoom - любой)

    Код: Выделить всё

    map.setCenter(new OpenLayers.LonLat(lon, lat), zoom); 
P.S. А как можно нарисовать карту в EPSG:4326? Я думал нужна проекция...
лангольеры под окном жрали время ом-ном-ном

dixgrey
Интересующийся
Сообщения: 32
Зарегистрирован: 22 июл 2009, 10:45
Репутация: 0
Контактная информация:

Re: По работе с OpenLayers и MapServer

Сообщение dixgrey » 29 июл 2009, 21:39

Mavka писал(а):

  1. P.S. А как можно нарисовать карту в EPSG:4326? Я думал нужна проекция...
EPSG:4326 - взял из примера, пока не знаю как можно по другому сделать, только учусь - суть такова, был шейп файл и мапфайл - делал сначала через шаблоны, потом для работы с OpenLayers сделал изменения в map файле для WMS (как тут в примере было указано) проверил в Qgis - все подключилось, подключил OpenLayers и вот тут застопорился - видно что оно подключается, раз какой-то прямоугольник появляется, он не сразу появился... но где-то ошибка, попробую сделать как вы посоветовали, может получится.

Аватара пользователя
Mavka
Гуру
Сообщения: 2060
Зарегистрирован: 14 мар 2008, 17:36
Репутация: 9

Re: По работе с OpenLayers и MapServer

Сообщение Mavka » 30 июл 2009, 09:15

Если "розовый прямоугольник" выглядит так:
ol-error.png
ol-error.png (5.06 КБ) 12132 просмотра
то щелкните по нему правой кнопкой, скопируйте адрес изображения. Он должен выглядеть примерно так:
это и есть запрос к WMS серверу. Если его открыть в браузере, то увидете подробное описание ошибки, например:
"You don't have permission to access /suas/files/atlas/2/wms.php on this server."
лангольеры под окном жрали время ом-ном-ном

Konstantin Tokar
Активный участник
Сообщения: 178
Зарегистрирован: 16 июл 2008, 09:56
Репутация: 1
Откуда: Москва

Re: По работе с OpenLayers и MapServer

Сообщение Konstantin Tokar » 30 июл 2009, 11:59

То же самое, и даже больше, можно увидеть в FireBug во вкладке Net. Наверно, в FAQ по OpenLayers надо включать оба этих способа отладки.

Аватара пользователя
Максим Дубинин
MindingMyOwnBusiness
Сообщения: 9128
Зарегистрирован: 06 окт 2003, 20:20
Репутация: 747
Ваше звание: NextGIS
Откуда: Москва
Контактная информация:

Re: По работе с OpenLayers и MapServer

Сообщение Максим Дубинин » 30 июл 2009, 17:34

Konstantin Tokar писал(а):Наверно, в FAQ по OpenLayers надо включать оба этих способа отладки.
Конечно, давайте текст добавки, добавим (можно личным сообщением, чтобы тут не повторяться).
пристегивайтесь, турбулентность прямо по курсу

dixgrey
Интересующийся
Сообщения: 32
Зарегистрирован: 22 июл 2009, 10:45
Репутация: 0
Контактная информация:

Re: По работе с OpenLayers и MapServer

Сообщение dixgrey » 31 июл 2009, 13:03

получилось, карта появилось на экране... правда она почему-то большого размера и смещена вправо... :) я так полагаю где-то координаты надо дополнительно прописать, пока не понял где и в каком формате...

где можно подробнее почитать про epsg:4326 или epsg:900913... что лучше использовать при работе с шейпами

Аватара пользователя
Mavka
Гуру
Сообщения: 2060
Зарегистрирован: 14 мар 2008, 17:36
Репутация: 9

Re: По работе с OpenLayers и MapServer

Сообщение Mavka » 31 июл 2009, 14:39

Здесь подробно описана epsg:900913
лангольеры под окном жрали время ом-ном-ном

Ответить

Вернуться в «Веб-картография»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 0 гостей