Страница 1 из 1
					
				НЕ отображается слой поверх OSM
				Добавлено: 01 апр 2011, 10:22
				 dascom
				Добрый день.
Необходимо отобразить WMS слой поверх OSM карты. В ходе долгих мучений получился вот такой текст скрипта:
 
  
     function init() {
        map = new OpenLayers.Map("basicMap");
		map.addControl(new OpenLayers.Control.LayerSwitcher());
        var mapnik = new OpenLayers.Layer.OSM();
		var wms1 = new OpenLayers.Layer.WMS(
                "voda",
                "http://...ru/cgi-bin/mapserv?map=/var/www/1.map&", 
                {
                    map: 'http://...ru/cgi-bin/mapserv?map=/var/www/1.map&',
                    transparent: 'TRUE',
                    layers: 'voda'
                },
		 
                {'reproject': true}
            );
	
        map.addLayer(mapnik);
		map.addLayer(wms1);
        map.setCenter(new OpenLayers.LonLat(40,43.55) // Center of the map
        .transform(
        new OpenLayers.Projection("EPSG:4326"), // transform from WGS 1984
        new OpenLayers.Projection("EPSG:900913") // to Spherical Mercator Projection
            ), 11// Zoom level
        );
	  }
Но в результате, отображается ОСМ карта, а вместо моего слоя - надпись: msWMSLoadGetParams(): WMS server error. Invalid SRS given: SRS must be valid for all requested layers.
			
		
				
			 
- f1.jpg (21.4 КБ) 10579 просмотров
 
Я так понял, что необходимо провести преобразование слоя в другую систему координат. Но как это сделать - не представляю ввиду того, что с openlayers столкнулся совсем недавно. В базе слой хранится, как я понял, в системе 4326.
Заранее благодарю за помощь.
 
			
					
				Re: НЕ отображается слой поверх OSM
				Добавлено: 01 апр 2011, 10:49
				 Mavka
				В map-файле добавьте проекцию 900913:
 
			
					
				Re: НЕ отображается слой поверх OSM
				Добавлено: 01 апр 2011, 12:09
				 dascom
				Вот листинг мапфайла
MAP
  SYMBOLSET      "./symb/symb1.sym"
  FONTSET "./fonts/fonts.list"
  NAME           "WMS"
  STATUS         ON
  IMAGETYPE      png
  EXTENT         39.3 43.5 40.7 43.9
  SIZE           800 600
  SHAPEPATH      "/ms4w/tmp"
 WEB
    TEMPLATE  "template.html"
    IMAGEPATH "/var/www/ms4w/img/"
    IMAGEURL  "/tmp/"
  	METADATA
		wms_title "eng_test"
		wms_abstract "This is the WMS"
		wms_onlineresource "http://1.ru/cgi-bin/mapserv?map=/var/www/1.map&"
		wms_getfeatureinfo "http://1.ru/cgi-bin/mapserv?map=/var/www/1.map&"
		wms_featureinfoformat "text/plain"
		wms_srs    "epsg:4326 epsg:900913" 
	END
 END
 PROJECTION
   "proj=latlong"
   "ellps=WGS84"
   "datum=WGS84"
   "init=epsg:900913"
 END
#вода
  LAYER
    NAME 'zv'
    TYPE POLYGON
    DUMP true
    TEMPLATE     "dummy"
    CONNECTIONTYPE postgis
    CONNECTION "dbname='pgis_test' host=1.ru port=5432 user='1' password='1' sslmode=disable"
    DATA 'the_geom FROM "voda" USING UNIQUE gid USING srid=4326'
      METADATA
	wms_title "voda"
        wms_abstract "voda"
	wms_include_items "all"
      END
    STATUS OFF
    TRANSPARENCY 100
    PROJECTION
    'proj=longlat'
    'ellps=WGS84'
    'datum=WGS84'
    'no_defs'
    END
    CLASS
	STYLE
         SYMBOL 'diagfill' 
	 SIZE 8
         COLOR 0 20 250
        END
    END
END
Так же делал первый раз, так что за косяки не судите строго.
Если на прямую к нему обращаться - вроде работает нормально...
 
			
					
				Re: НЕ отображается слой поверх OSM
				Добавлено: 01 апр 2011, 12:49
				 Mavka
				Кроме того что на уровне MAP проекцию нужно исправить (странно, что он у вас "работает нормально")
ошибок не вижу. Попробуйте 
включить отладку.
Из кода OpenLayers уберите (дублирует url) всю строку:
Код: Выделить всё
map: 'http://...ru/cgi-bin/mapserv?map=/var/www/1.map&', 
 
			
					
				Re: НЕ отображается слой поверх OSM
				Добавлено: 01 апр 2011, 13:30
				 dascom
				В инструкции было написано указать в мапфайле следующие параметры проекции:  
"proj=latlong"
"ellps=WGS84"
"datum=WGS84"
"init=epsg:4326"
Если не трудно - поясните - что здесь  для чего и что лишнее?
			 
			
					
				Re: НЕ отображается слой поверх OSM
				Добавлено: 01 апр 2011, 13:34
				 Mavka
				То, что у вас прописано не "init=epsg:4326", а "init=epsg:900913"
И проекцию нужно указывать или:
или
 
			
					
				Re: НЕ отображается слой поверх OSM
				Добавлено: 01 апр 2011, 14:01
				 dascom
				Спасибо. Понял. Но не смотря на все изменения , слой по прежнему не оттображается.
По прежнему выдает ошибку :
			
		
				
			 
- f2.jpg (24.2 КБ) 10553 просмотра
  
			
					
				Re: НЕ отображается слой поверх OSM
				Добавлено: 01 апр 2011, 14:18
				 dascom
				Забыл уточнить. При работе с гуглом в качестве подложки - все работает отлично.
var gmap = new OpenLayers.Layer.Google(	"Google Streets", {numZoomLevels: 20} );
var gsat = new OpenLayers.Layer.Google(	"Google Satellite",	{type: G_SATELLITE_MAP, numZoomLevels: 20}	);
var wms1 = new OpenLayers.Layer.WMS("voda",
                "http://1.ru/cgi-bin/mapserv?map=/var/www/1.map&", 
                {
                    transparent: 'TRUE',
                    layers: 'voda'
                },
                {'reproject': true}
            ); 
			
					
				Re: НЕ отображается слой поверх OSM
				Добавлено: 01 апр 2011, 15:03
				 Mavka
				1. Как вы должно быть заметили, ошибка не так же самая, а другая.
2. Проверять работу WMS лучше в настольной ГИС (qgis).
3. Смотрите какие запросы уходят из OL на сервер.
4. Смотрите логи отладки.
5. В гугло-слое вы использовали reproject. Это совершенно другой механизм перепроецирования.
Почитайте.
 
			
					
				Re: НЕ отображается слой поверх OSM
				Добавлено: 07 апр 2011, 13:40
				 dascom
				Итак, при активном участии Mavka (за что я безмерно благодарен), вопрос решен.
В данном случае проблема заключалась в отсутствии необходимой проекции, а именно: 
Нужно было найти папку с файлами проекций. В OSGeo4W это 'c:\OSGeo4W\share\proj\', в Linux можно искать по файлу 'epsg'. Далее НУЖНО (для надежности) во все три файла - epsg, esri, esri.extra прописать первой строкой:
Код: Выделить всё
#  google mercator
 <900913> +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +wktext  +no_defs <>  
После чего у меня все заработало. Всем удачи.