mapserver, openlayers, wms и слой google

Mapserver, GeoServer, MapGuide, Google и другое ПО для веб-картографии
Ответить
Аватара пользователя
soilmsu
Интересующийся
Сообщения: 33
Зарегистрирован: 02 фев 2009, 17:07
Репутация: 0
Откуда: Москва

mapserver, openlayers, wms и слой google

Сообщение soilmsu »

Здравствуйте!

Второй день бьюсь с проблемой...

Пытаюсь вывести слой WMS совместно со слоем google, безуспешно.. До этого вывел несколько слоев в другой карте в обычной проекции, все ок было.

Mapfile:

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

MAP
 NAME "wms_pgr"
 IMAGETYPE	PNG
 STATUS	ON
 EXTENT		15 12 195 111
 SIZE		800 600
 SHAPEPATH	"C:\ms4w\apps\pgr\data"
 IMAGECOLOR	255 255 255
  FONTSET "C:\ms4w\apps\pgr\fonts\fonts.txt"


 WEB
 TEMPLATE "C:\ms4w\apps\pgr\template.html"
 IMAGEPATH "C:\ms4w\apps\pgr\data\tmp"
 IMAGEURL "C:\ms4w\tmp"


	METADATA
	wms_title "pgr_google"
	wms_abstract "this is WMS of pgr"
	wms_onlineresource "http://localhost/cgi-bin/mapserv.exe?map=/ms4w/apps/pgr/pgr_google.map&"
	wms_srs  "epsg:4326 epsg:900913"
	wms_getfeatureinfo "http://localhost/cgi-bin/mapserv.exe?map=/ms4w/apps/pgr/pgr_google.map&" 
	wms_featureformat "text/plain"
	wms_enable_request "*"
	END
 END
 
	PROJECTION
   "proj=latlong"
   "ellps=WGS84"
   "datum=WGS84"
	END
 
LAYER
  NAME poias
  DATA pochv_rayony_Russia_region_google
  STATUS ON
  TYPE POLYGON
  CLASSITEM "ZONA"
  TEMPLATE "dummy"

	CLASS
      NAME       "Остальное"
	  EXPRESSION '' # Выражение, определяющее класс
      STYLE
		OUTLINECOLOR 0 0 0
      END
    END
	

		METADATA
		wms_title         "poias"
		wms_abstract      "poisa"
		wms_srs           "EPSG:4326 epsg:900913"
		wms_include_items "all"
		END

	PROJECTION
   "proj=latlong"
   "ellps=WGS84"
   "datum=WGS84"
   END
   
 END


template:

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

	   var lon = 55;
       var lat = 55;
       var zoom = 0;
	  
var map = new OpenLayers.Map('map', {'projection': new OpenLayers.Projection("EPSG:4326"), 
'maxExtent': new OpenLayers.Bounds(15,12,195,111), 'maxResolution': 'auto'})

		 
		 	var ghyb = new OpenLayers.Layer.Google("Google Hybrid", 
             {type: google.maps.MapTypeId.HYBRID, numZoomLevels: 20});

           var mappath="C:/ms4w/apps/pgr/pgr_google.map";
           var mapurl="http://localhost/cgi-bin/mapserv.exe";
           var soilmap = new OpenLayers.Layer.WMS("Soils",
            mapurl,    {map: mappath, layers: 'poias', format: 'png'}, 
			{isBaseLayer: false, 'reproject': true, opacity: 0.5});




map.addLayers([ghyb,soilmap]);
		 
		 var options = {
projection: new OpenLayers.Projection("EPSG:900913"),
units: "m"};
Ogrinfo:

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

Geometry: Polygon
Feature Count: 1378
Extent: (19.640703, 41.173838) - (190.297348, 81.890823)
Layer SRS WKT:
GEOGCS["GCS_WGS_1984",
    DATUM["WGS_1984",
        SPHEROID["WGS_1984",6378137,298.257223563]],
    PRIMEM["Greenwich",0],
    UNIT["Degree",0.017453292519943295]]
Сейчас, если прав. клик мышкой на ошибку ( http://localhost/cgi-bin/mapserv.exe?MA ... HEIGHT=256 ), пишет Invalid values for BBOX



Перепробовал все что только можно, по форумам шерстил.. Проекцию 900913 в proj прописал. extent определял (перепроецировал карту в 900913 для этого) и менял и так и сяк. EXTENT 19.640703, 41.173838) - (190.297348, 81.890823 пробовал, не помолго.

До того, как поменял проекцию в мапфайле на 900913, все работало, (хотя гугл карты все равно отображались на заднем фоне уменьшенные, когда как wms слой был на переднем и все с ним было ок).

Скриншот прилагаю.


Спасибо!
Вложения
232121.png
232121.png (110.48 КБ) 7525 просмотров
Последний раз редактировалось soilmsu 20 сен 2011, 14:48, всего редактировалось 1 раз.
The author accepts no liability for any harm, injury, disease, insanity, death, life, trauma or shotgun wounds caused, directly or indirectly, by this reply to any person.
Аватара пользователя
soilmsu
Интересующийся
Сообщения: 33
Зарегистрирован: 02 фев 2009, 17:07
Репутация: 0
Откуда: Москва

Re: mapserver, openlayers, wms и слой google

Сообщение soilmsu »

Поменял центровку карты и зум (lat lon) на zoomtoMaxExtent и слой начал показываться. И даже в нужном месте!

см. скриншот
Изображение


Однако, когда приближаю карту (увеличиваю), слой пропадает и картина примерно та же, что и в скриншоте, который в первом сообщении этого топика:
Изображение

Из access.log:

Первый раз обращаюсь к карте, когда слой отображается:

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

127.0.0.1 - - [20/Sep/2011:15:41:17 +0400] "GET /cgi-bin/mapserv.exe?MAP=C%3A%2Fms4w%2Fapps%2Fpgr%2Fpgr_google.map&
LAYERS=poias&FORMAT=png&SERVICE=WMS&VERSION=1.1.1&
REQUEST=GetMap&STYLES=&EXCEPTIONS=application%2Fvnd.ogc.se_inimage&
SRS=EPSG%3A900913&BBOX=0.0000024996697902679,3.9953738451004e-7,5009377.0848025,5009377.0848004&WIDTH=256&
HEIGHT=256 HTTP/1.1" 200 758
Приближаю карту, слой не отображается:

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

127.0.0.1 - - [20/Sep/2011:15:44:31 +0400] "GET /cgi-bin/mapserv.exe?MAP=C%3A%2Fms4w%2Fapps%2Fpgr%2Fpgr_google.map&
LAYERS=poias&FORMAT=png&SERVICE=WMS&VERSION=1.1.1&
REQUEST=GetMap&STYLES=&EXCEPTIONS=application%2Fvnd.ogc.se_inimage&
SRS=EPSG%3A900913&BBOX=0,0,20037508.3392,20037508.3392&
WIDTH=256&HEIGHT=256 HTTP/1.1" 200 33286

127.0.0.1 - - [20/Sep/2011:15:45:50 +0400] "GET /cgi-bin/mapserv.exe?MAP=C%3A%2Fms4w%2Fapps%2Fpgr%2Fpgr_google.map&
LAYERS=poias&FORMAT=png&SERVICE=WMS&VERSION=1.1.1&
REQUEST=GetMap&STYLES=&EXCEPTIONS=application%2Fvnd.ogc.se_inimage&
SRS=EPSG%3A900913&BBOX=0,0,5009377.0848,5009377.0848&WIDTH=256&HEIGHT=256 HTTP/1.1" 200 758

127.0.0.1 - - [20/Sep/2011:15:45:50 +0400] "GET /cgi-bin/mapserv.exe?MAP=C%3A%2Fms4w%2Fapps%2Fpgr%2Fpgr_google.map&
LAYERS=poias&FORMAT=png&SERVICE=WMS&VERSION=1.1.1&
REQUEST=GetMap&STYLES=&EXCEPTIONS=application%2Fvnd.ogc.se_inimage&
SRS=EPSG%3A900913&BBOX=0,0,10018754.1696,10018754.1696&
WIDTH=256&HEIGHT=256 HTTP/1.1" 200 34981
Поможите, люди добрые!!
The author accepts no liability for any harm, injury, disease, insanity, death, life, trauma or shotgun wounds caused, directly or indirectly, by this reply to any person.
Аватара пользователя
soilmsu
Интересующийся
Сообщения: 33
Зарегистрирован: 02 фев 2009, 17:07
Репутация: 0
Откуда: Москва

Re: mapserver, openlayers, wms и слой google

Сообщение soilmsu »

Никак не пойму в чем проблема... У кого-нибудь есть идеи?
The author accepts no liability for any harm, injury, disease, insanity, death, life, trauma or shotgun wounds caused, directly or indirectly, by this reply to any person.
Аватара пользователя
soilmsu
Интересующийся
Сообщения: 33
Зарегистрирован: 02 фев 2009, 17:07
Репутация: 0
Откуда: Москва

Re: mapserver, openlayers, wms и слой google

Сообщение soilmsu »

Мытарства продолжаются :)

Однако есть прогресс - карта выводится. Но выводится в какой-то странной проекции, близкой к нужной, но границы не совпадают - они на несколько десятков километров севернее, чем слой гугл (см. скриншот)
ggggggggggg.jpg
ggggggggggg.jpg (62.23 КБ) 7435 просмотров
мапфайл

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

MAP
 NAME "wms_pgr"
 IMAGETYPE	PNG
 STATUS	ON
 EXTENT		15 12 195 111
 SIZE		800 600
 SHAPEPATH	"C:\ms4w\apps\pgr\data"
 IMAGECOLOR	255 255 255
  FONTSET "C:\ms4w\apps\pgr\fonts\fonts.txt"


 WEB
 TEMPLATE "C:\ms4w\apps\pgr\template.html"
 IMAGEPATH "C:\ms4w\apps\pgr\data\tmp"
 IMAGEURL "C:\ms4w\tmp"


	METADATA
	wms_title "pgr_google"
	wms_abstract "this is WMS of pgr"
	wms_onlineresource "http://localhost/cgi-bin/mapserv.exe?map=/ms4w/apps/pgr/pgr_google.map&"
	wms_srs  "epsg:4326"
	wms_getfeatureinfo "http://localhost/cgi-bin/mapserv.exe?map=/ms4w/apps/pgr/pgr_google.map&" 
	wms_featureformat "text/plain"
	wms_enable_request "*"
	END
 END
 
	PROJECTION
   "proj=latlong"
   "ellps=WGS84"
   "datum=WGS84"
	END
 
LAYER
  NAME poias
  DATA pochv_rayony_Russia_region_google
  STATUS ON
  TYPE POLYGON
  CLASSITEM "ZONA"
  TEMPLATE "dummy"

 	CLASS
      NAME       "Остальное"
	      STYLE
		OUTLINECOLOR 255 0 0
      END
    END
	


		METADATA
		wms_title         "poias"
		wms_abstract      "poisa"
		wms_srs           "EPSG:4326"
		wms_include_items "all"
		END

	PROJECTION
   "proj=latlong"
   "ellps=WGS84"
   "datum=WGS84"
   END
 END
END
шаблон

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

var map = new OpenLayers.Map('map', {'projection': new OpenLayers.Projection("EPSG:4326"), 
'maxExtent': new OpenLayers.Bounds(15,12,195,111), maxResolution: 'auto'});

		 
		 	var ghyb = new OpenLayers.Layer.Google("Google Hybrid", 
             {'type': G_HYBRID_MAP, numZoomLevels: 20});

           var mappath="C:/ms4w/apps/pgr/pgr_google.map";
           var mapurl="http://localhost/cgi-bin/mapserv.exe";
		   
           var soilmap = new OpenLayers.Layer.WMS("Soils",
            mapurl,    {map: mappath, layers: 'poias', format: 'image/png', transparent: "true"}, 
			{isBaseLayer: false, 'reproject': true, opacity: 0.6});


map.addLayers([ghyb,soilmap]);
map.setCenter(new OpenLayers.LonLat(105,65), 3);		
Пробовал накладывать эту же карту на гугл в qgis 1.7 - границы совпадают... Значит косяк в коде.

Пробовал перепроецировать слой в другие проекции в qgis и mapinfo - не помогает ( http://pastebin.com/ZRpXYpxL тут код, который прописывал для 900913 проекции)...

Подскажите, пожалуйста, в чем может быть дело?
The author accepts no liability for any harm, injury, disease, insanity, death, life, trauma or shotgun wounds caused, directly or indirectly, by this reply to any person.
Аватара пользователя
Mavka
Гуру
Сообщения: 2060
Зарегистрирован: 14 мар 2008, 17:36
Репутация: 9

Re: mapserver, openlayers, wms и слой google

Сообщение Mavka »

В map-файле добавьте выходные проекции:

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

wms_srs "epsg:4326 epsg:3857 epsg:900913" 
В коде для soilmap уберите reproject, а в слой ghyb добавьте sphericalMercator. Подробнее см. здесь.

P.S. Если UMN MapServer начнет ругаться на проекции, то найдите файл "epsg" и проверьте наличие в нем описания 900913. Если нет, то добавьте в начало файла:

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

<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 <> 
Под рукой MS4W чтобы проверить нету, но в OSGeo4W это проделывать необходимо.
лангольеры под окном жрали время ом-ном-ном
Аватара пользователя
soilmsu
Интересующийся
Сообщения: 33
Зарегистрирован: 02 фев 2009, 17:07
Репутация: 0
Откуда: Москва

Re: mapserver, openlayers, wms и слой google

Сообщение soilmsu »

Спасибо большое! Сделал все что Вы рекомендовали, но не помогло (900913 в proj давно прописал еще) :(


добавление sphericalMercator путает bbox -> ВМС не отображается.

Учитывая Ваши рекомендации и еще рекомендации человека из irc попробовал такой вариант:


var map = new OpenLayers.Map('map', {projection: new OpenLayers.Projection("EPSG:900913"), displayProjection: new OpenLayers.Projection("EPSG:4326"),
maxExtent: new OpenLayers.Bounds(-20037508.34, -20037508.34, 20037508.34, 20037508.34), maxResolution: 156543.0399, units: 'm'})


var ghyb = new OpenLayers.Layer.Google("Google Hybrid",
{'type': G_HYBRID_MAP, sphericalMercator:true, numZoomLevels: 20});

var mappath="C:/ms4w/apps/pgr/pgr_google.map";
var mapurl="http://localhost/cgi-bin/mapserv.exe";

var soilmap = new OpenLayers.Layer.WMS("Soils",
mapurl, {map: mappath, layers: 'poias', format: 'image/png'},
{isBaseLayer: false, opacity: 0.6});

var A = new OpenLayers.Projection("EPSG:4326");
var B = new OpenLayers.Projection("EPSG:900913");

map.addLayers([ghyb,soilmap]);
map.setCenter(new OpenLayers.LonLat(105,65).transform(A,B), 3);

Гугл отображается, там где надо при чем, но нет слоя ВМС.

Сделал вмс не прозрачным и ПКМ на него, скопировал УРЛ в строку браузера:

http://localhost/cgi-bin/mapserv.exe?MA ... 28131.2536[/b]&WIDTH=256&HEIGHT=256

если руками ставлю в этой строке другой bbox, то слой отображается
http://localhost/cgi-bin/mapserv.exe?MA ... 12,195,111[/b]&WIDTH=256&HEIGHT=256

Каким-то образом надо исправить вывод верных координат..

Уважаемый Mavka, у Вас есть идеи?

з.ы.
обновил openlayers до последней версии, не помогло..
The author accepts no liability for any harm, injury, disease, insanity, death, life, trauma or shotgun wounds caused, directly or indirectly, by this reply to any person.
Аватара пользователя
Mavka
Гуру
Сообщения: 2060
Зарегистрирован: 14 мар 2008, 17:36
Репутация: 9

Re: mapserver, openlayers, wms и слой google

Сообщение Mavka »

soilmsu писал(а):добавление sphericalMercator путает bbox -> ВМС не отображается.
Разве я так написал? Может быть, все таки, наоборот?

Найдите на своей карте Гвинейский залив и под сильным увеличением поищите слой WMS в районе нулевых координат или чуть северо-восточнее.
soilmsu писал(а):если руками ставлю в этой строке другой bbox, то слой отображается
У меня в таком случае вызывает сильное подозрение правильность систем координат, заданная в map-файле.
лангольеры под окном жрали время ом-ном-ном
Аватара пользователя
soilmsu
Интересующийся
Сообщения: 33
Зарегистрирован: 02 фев 2009, 17:07
Репутация: 0
Откуда: Москва

Re: mapserver, openlayers, wms и слой google

Сообщение soilmsu »

Решил проблему так:

скачал новую мапинфо 10.5

там есть проекция EPSG:3857, в нее перевел карту.

в шаблоне указал

var map = new OpenLayers.Map('map', {projection: new OpenLayers.Projection("EPSG:3857"),
maxExtent: new OpenLayers.Bounds(2186393.04,5038076.91,21183803.90,16880990.90), units: 'm'});


var ghyb = new OpenLayers.Layer.Google("Google Hybrid",
{'type': G_HYBRID_MAP, sphericalMercator:true, numZoomLevels: 20});

var mappath="C:/ms4w/apps/pgr/pgr_google.map";
var mapurl="http://localhost/cgi-bin/mapserv.exe";

var soilmap = new OpenLayers.Layer.WMS("Soils",
mapurl, {map: mappath, layers: 'poias', format: 'image/png', transparent: "true"},
{isBaseLayer: false, opacity: 0.6});


map.addLayers([ghyb,soilmap]);
map.setCenter(new OpenLayers.LonLat(11762575, 9371255), 3);



В мапфайле:
PROJECTION
"init=epsg:900913"
END



И все встало на свои места :)

Mavka, спасибо Вам за ценные советы!
The author accepts no liability for any harm, injury, disease, insanity, death, life, trauma or shotgun wounds caused, directly or indirectly, by this reply to any person.
Ответить

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

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

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