Страница 1 из 1

mapserver, openlayers , pulkovo 42

Добавлено: 15 сен 2011, 11:59
soilmsu
Здравствуйте.

Никак не выводится wms в openlayers.

http://localhost/cgi-bin/mapserv.exe?ma ... s&mode=map - так она нормально отображается.

Так же все ок отображается, если добавляю WMS слой в QGIS.

map file:

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

MAP
 NAME "wms_pgr"
 IMAGETYPE	PNG
 STATUS	ON
 EXTENT		-4346700.50 5266065.51 3673131.75 9687927.99
 SIZE		800 600
 SHAPEPATH	"C:\ms4w\apps\pgr\data"
 IMAGECOLOR	249 245 186


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


	METADATA
	wms_title "pgr"
	wms_abstract "this is WMS of pgr"
	wms_onlineresource "http://localhost/cgi-bin/mapserv.exe?map=/ms4w/apps/pgr/pgr.map&"
	wms_srs  "EPSG:4326"
	wms_getfeatureinfo "http://localhost/cgi-bin/mapserv.exe?map=/ms4w/apps/pgr/pgr.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
  STATUS ON
  TYPE POLYGON
  TEMPLATE "dummy"

 
		CLASS
		NAME "poias"
		STYLE
		COLOR 232 232 232
		OUTLINECOLOR 32 32 32
		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
шаблон:

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

<html>
<head>
  <title>OpenLayers PGR</title>
    <script
    src="C:/ms4w/apps/openlayers-2.10/lib/OpenLayers.js"></script>
    </head>
    <body>
      <div style="width:100%; height:100%" id="map"></div>
      <script type="text/javascript">
	  	var lat = 36;
        var lon = 32;
        var zoom = 2;
var map = new OpenLayers.Map('map');
projection: new OpenLayers.Projection("EPSG:900913");
displayProjection: new OpenLayers.Projection("EPSG:4326");
maxExtent: new OpenLayers.Bounds(-4346700.50,5266065.51,3673131.75,9687927.99);
           var mappath="C:/ms4w/apps/pgr/pgr.map";
           var mapurl="http://localhost/cgi-bin/mapserv.exe";
           var layer = new OpenLayers.Layer.WMS("WMS",
            mapurl,    {map: mappath, layers: 'poias', format: 'png'},{'reproject': true});
           map.addLayer(layer);

map.setCenter(new OpenLayers.LonLat(lon, lat), zoom); 
        map.addControl( new OpenLayers.Control.LayerSwitcher() );
      </script>

</body>
</html>
Косяк как я понимаю в проекции.. Пробовал менять все и так и сяк, не работает, шерстил форумы, прочитал побольше про проекции. Как я понимаю, надо определить проекцию карты в ogrinfo (хотя и без этого все выводилось) для начала, а потом прописать ее в mapfile:


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

C:\ms4w\Apache\cgi-bin>ogrinfo.exe -al -so 1.shp
INFO: Open of `1.shp'
      using driver `ESRI Shapefile' successful.

Layer name: 1
Geometry: Polygon
Feature Count: 1378
Extent: (-4346700.498942, 5266065.506618) - (3673131.754524, 9687927.994227)
Layer SRS WKT:
PROJCS["_MI_0",
    GEOGCS[,
        DATUM["Pulkovo_1942",
            SPHEROID["Krassovsky_1940_1948",6378245,298.300000000038]],
        PRIMEM["Greenwich",0],
        UNIT["Degree",0.017453292519943295]],
    PROJECTION["Equidistant_Conic"],
    PARAMETER["standard_parallel_1",51.3041667],
    PARAMETER["standard_parallel_2",66.4366667],
    PARAMETER["latitude_of_center",0],
    PARAMETER["longitude_of_center",100],
    PARAMETER["false_easting",0],
    PARAMETER["false_northing",0],
    UNIT["Meter",1]]

Осознал свой косяк в mapfile и шаблоне.. пробовал вставлять туда разные "окна" Пулково 42, ничего не отображается или ругается на неверный SRS.

Никак не пойму как определить зону для Pulkovo_1942? Где это прописано в ogrinfo? (что бы потом вписать эту проекцию в map file)

Изображение - что показывает openlayers (template.html)

Изображение - что показывается в qgis и через http://localhost/cgi-bin/mapserv.exe?ma ... s&mode=map


Заранее огромное спасибо за помощь.

Re: mapserver, openlayers , pulkovo 42

Добавлено: 15 сен 2011, 12:04
Mavka
Полистайте логи Apache, там увидите расхождения qgis и OL.
reproject в свойствах слоя не нужен.

Re: mapserver, openlayers , pulkovo 42

Добавлено: 15 сен 2011, 12:24
soilmsu
Спасибо за быстрый ответ!

Мапсервер:

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

/cgi-bin/mapserv.exe?MAP=C%3A%2Fms4w%2Fapps%2Fpgr%2Fpgr.map&
LAYERS=poias&
FORMAT=png&S
ERVICE=WMS&
VERSION=1.1.1&
REQUEST=GetMap&
STYLES=&
EXCEPTIONS=application%2Fvnd.ogc.se_inimage&
SRS=EPSG%3A4326&
BBOX=135,-90,180,-45&
WIDTH=256&HEIGHT=256%20
HTTP/1.1%22%20200%20761
QGIS:

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

/cgi-bin/mapserv.exe?map=/ms4w/apps/pgr/pgr.map&
SERVICE=WMS&
VERSION=1.3.0&
REQUEST=GetMap&
BBOX=1668100.000000,-4346700.000000,9687930.000000,3673130.000000&
CRS=EPSG:4326&
WIDTH=32&
HEIGHT=32&
LAYERS=wms_pgr&
STYLES=&
FORMAT=image/png&TRANSPARENT=TRUE HTTP/1.1" 200 649

/cgi-bin/mapserv.exe?map=/ms4w/apps/pgr/pgr.map&SERVICE=WMS&
VERSION=1.3.0&
REQUEST=GetMap&
BBOX=5261937.420561,-4346700.000000,9687930.000000,3673130.000000&
CRS=EPSG:4326&
WIDTH=1109&
HEIGHT=612&
LAYERS=wms_pgr&
STYLES=&
FORMAT=image/png&
DPI=96&
TRANSPARENT=TRUE HTTP/1.1" 200 643994
что-то не пойму в чем дело-то... попробовал в openlayers сделать не LAYERS=poias&, а LAYERS=wms_pgr& - не помогает.

может проблема в BBOX.. сделал

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

new OpenLayers.Bounds(1668100.000000,-4346700.000000,9687930.000000,3673130.000000);
или с 5261937.420561,-4346700.000000,9687930.000000,3673130.000000, тоже самое, желтый экран (reproject убрал)

Re: mapserver, openlayers , pulkovo 42

Добавлено: 15 сен 2011, 13:01
Mavka
В запросах не совместимые параметры:
BBOX=5261937.420561,-4346700.000000,9687930.000000,3673130.000000&
CRS=EPSG:4326&
В map-файле аналогично:
EXTENT -4346700.50 5266065.51 3673131.75 9687927.99
PROJECTION
"proj=latlong"
"ellps=WGS84"
"datum=WGS84"
END
В wms_srs добавьте 900913

pochv_rayony_Russia_region в какой СК?

Re: mapserver, openlayers , pulkovo 42

Добавлено: 15 сен 2011, 14:12
soilmsu
Спасибо за помощь отчаявшемуся человеку! :)

Добавил в wms_srs 900913, перестал отображаться даже фон - invalid srs given: srs must be valid for all requested layers.



Иходя из ogrinfo, pochv_rayony_Russia_region:

Layer name: 1
Geometry: Polygon
Feature Count: 1378
Extent: (-4346700.498942, 5266065.506618) - (3673131.754524, 9687927.994227)
Layer SRS WKT:
PROJCS["_MI_0",
GEOGCS[,
DATUM["Pulkovo_1942",
SPHEROID["Krassovsky_1940_1948",6378245,298.300000000038]],
PRIMEM["Greenwich",0],
UNIT["Degree",0.017453292519943295]],
PROJECTION["Equidistant_Conic"],
PARAMETER["standard_parallel_1",51.3041667],
PARAMETER["standard_parallel_2",66.4366667],
PARAMETER["latitude_of_center",0],
PARAMETER["longitude_of_center",100],
PARAMETER["false_easting",0],
PARAMETER["false_northing",0],
UNIT["Meter",1]]


Видимо в мапфайле надо изменить СК все, т.к. там указан WSG.. Странно только, что QGIS все нормально отображает.

То есть мы имеет Pulkovo 42, эллипсоид Красовского. Единицы измерения - метры.. То есть это не WGS 1984, а Pulkovo 1942, так? Я никак не могу понять какая это зона Pulkovo 1942, что бы выбрать номер EPSG (http://gis-lab.info/qa/proj-sk-faq.html#1 - тут картинка с разграфовкой зон, я не очень понял как ей пользоваться.. карта попадает с 19 по 27 интервалы, какое выбрать?

Re: mapserver, openlayers , pulkovo 42

Добавлено: 15 сен 2011, 15:56
Mavka
Equidistant_Conic с зонами вряд ли связан...
Конвертните ее в обычный epsg:4326 и не гадайте.

Re: mapserver, openlayers , pulkovo 42

Добавлено: 15 сен 2011, 19:47
soilmsu
Спасибо! )) Перевел через универсальный транслятор и заработало!

Теперь уже который час борюсь с проблемой выравнивания карты (см вложенный файл) - она смещена вправо вверх

Пробовал менять EXTENT, не помогло.

Проверил логи апача:

OL:

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

/cgi-bin/mapserv.exe?MAP=C%3A%2Fms4w%2Fapps%2Fpgr%2Fpgr.map&LAYERS=wms_pgr&FORMAT=png&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&STYLES=&EXCEPTIONS=application%2Fvnd.ogc.se_inimage&SRS=EPSG%3A4326&BBOX=-90,-90,0,0&WIDTH=256&HEIGHT=256 HTTP/1.1" 200 761

/cgi-bin/mapserv.exe?MAP=C%3A%2Fms4w%2Fapps%2Fpgr%2Fpgr.map&LAYERS=wms_pgr&FORMAT=png&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&STYLES=&EXCEPTIONS=application%2Fvnd.ogc.se_inimage&SRS=EPSG%3A4326&BBOX=-180,-90,-90,0&WIDTH=256&HEIGHT=256 HTTP/1.1" 200 761

/cgi-bin/mapserv.exe?MAP=C%3A%2Fms4w%2Fapps%2Fpgr%2Fpgr.map&LAYERS=wms_pgr&FORMAT=png&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&STYLES=&EXCEPTIONS=application%2Fvnd.ogc.se_inimage&SRS=EPSG%3A4326&BBOX=90,-90,180,0&WIDTH=256&HEIGHT=256 HTTP/1.1" 200 761

/cgi-bin/mapserv.exe?MAP=C%3A%2Fms4w%2Fapps%2Fpgr%2Fpgr.map&LAYERS=wms_pgr&FORMAT=png&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&STYLES=&EXCEPTIONS=application%2Fvnd.ogc.se_inimage&SRS=EPSG%3A4326&BBOX=0,-90,90,0&WIDTH=256&HEIGHT=256 HTTP/1.1" 200 761

/cgi-bin/mapserv.exe?MAP=C%3A%2Fms4w%2Fapps%2Fpgr%2Fpgr.map&LAYERS=wms_pgr&FORMAT=png&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&STYLES=&EXCEPTIONS=application%2Fvnd.ogc.se_inimage&SRS=EPSG%3A4326&BBOX=-180,0,-90,90&WIDTH=256&HEIGHT=256 HTTP/1.1" 200 761
/cgi-bin/mapserv.exe?MAP=C%3A%2Fms4w%2Fapps%2Fpgr%2Fpgr.map&LAYERS=wms_pgr&FORMAT=png&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&STYLES=&EXCEPTIONS=application%2Fvnd.ogc.se_inimage&SRS=EPSG%3A4326&BBOX=-90,0,0,90&WIDTH=256&HEIGHT=256 HTTP/1.1" 200 761

/cgi-bin/mapserv.exe?MAP=C%3A%2Fms4w%2Fapps%2Fpgr%2Fpgr.map&LAYERS=wms_pgr&FORMAT=png&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&STYLES=&EXCEPTIONS=application%2Fvnd.ogc.se_inimage&SRS=EPSG%3A4326&BBOX=90,0,180,90&WIDTH=256&HEIGHT=256 HTTP/1.1" 200 36976

/cgi-bin/mapserv.exe?MAP=C%3A%2Fms4w%2Fapps%2Fpgr%2Fpgr.map&LAYERS=wms_pgr&FORMAT=png&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&STYLES=&EXCEPTIONS=application%2Fvnd.ogc.se_inimage&SRS=EPSG%3A4326&BBOX=0,0,90,90&WIDTH=256&HEIGHT=256 HTTP/1.1" 200 28872
qgis:

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

/cgi-bin/mapserv.exe?map=/ms4w/apps/pgr/pgr.map&SERVICE=WMS&
VERSION=1.3.0&REQUEST=GetMap&
BBOX=41.136957,19.640700,81.890700,190.297000&
CRS=epsg:4326&WIDTH=1341&HEIGHT=320&
LAYERS=wms_pgr&STYLES=&FORMAT=image/png&DPI=96&
TRANSPARENT=TRUE HTTP/1.1" 200 396896

/cgi-bin/mapserv.exe?map=/ms4w/apps/pgr/pgr.map&SERVICE=WMS&
VERSION=1.3.0&REQUEST=GetMap&BBOX=-88.765600,19.640700,81.890700,190.297000&
CRS=epsg:4326&WIDTH=120&HEIGHT=120&
LAYERS=wms_pgr&STYLES=&FORMAT=image/png&
DPI=96&TRANSPARENT=TRUE HTTP/1.1" 200 4123


добавлял HEIGHT побольше в шаблон - не помогло..

шаблон:

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

	var lat = 0;
        var lon = 0;
        var zoom = 2;
var map = new OpenLayers.Map('map');
Projection: new OpenLayers.Projection("EPSG:4326");
maxExtent: new OpenLayers.Bounds(41.009601,19.640700,81.890700,190.297000);
           var mappath="C:/ms4w/apps/pgr/pgr.map";
           var mapurl="http://localhost/cgi-bin/mapserv.exe";
           var layer = new OpenLayers.Layer.WMS("WMS",
            mapurl,    {map: mappath, layers: 'wms_pgr', format: 'png'},{'reproject': true});
           map.addLayer(layer);

map.setCenter(new OpenLayers.LonLat(lon, lat), zoom); 
        map.addControl( new OpenLayers.Control.LayerSwitcher() );
мапфайл:

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

MAP
 NAME "wms_pgr"
 IMAGETYPE	PNG
 STATUS	ON
 EXTENT		19.6407 41.1742 190.297 81.8907
 SIZE		1280 1024
 SHAPEPATH	"C:\ms4w\apps\pgr\data"
 IMAGECOLOR	249 245 186


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


	METADATA
	wms_title "pgr"
	wms_abstract "this is WMS of pgr"
	wms_onlineresource "http://localhost/cgi-bin/mapserv.exe?map=/ms4w/apps/pgr/pgr.map&"
	wms_srs  "epsg:4326"
	wms_getfeatureinfo "http://localhost/cgi-bin/mapserv.exe?map=/ms4w/apps/pgr/pgr.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
  STATUS ON
  TYPE POLYGON
  TEMPLATE "dummy"

 
		CLASS
		NAME "poias"
		STYLE
		COLOR 232 232 232
		OUTLINECOLOR 32 32 32
		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
p.s.
{'reproject': true} убирал, не помогло )

Re: mapserver, openlayers , pulkovo 42

Добавлено: 16 сен 2011, 07:24
old_Bibigon
soilmsu писал(а):Пробовал менять EXTENT, не помогло.
...

шаблон:

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

	var lat = 0;
        var lon = 0;
        var zoom = 2;
var map = new OpenLayers.Map('map');
Projection: new OpenLayers.Projection("EPSG:4326");
maxExtent: new OpenLayers.Bounds(41.009601,19.640700,81.890700,190.297000);
           var mappath="C:/ms4w/apps/pgr/pgr.map";
           var mapurl="http://localhost/cgi-bin/mapserv.exe";
           var layer = new OpenLayers.Layer.WMS("WMS",
            mapurl,    {map: mappath, layers: 'wms_pgr', format: 'png'},{'reproject': true});
           map.addLayer(layer);

У Вас перепутаны координаты в Bounds, смотрите тут и вместо zoom=2 с таким лучше использовать map.zoomToMaxExtent()

Re: mapserver, openlayers , pulkovo 42

Добавлено: 16 сен 2011, 15:04
soilmsu
Спасибо за подсказку, разобрался немного с Bounds :D

Как я понял, т.к. у меня EPSG:4326, макс. охват всего глобуса (-180,-90,180,90). Я измерил в qgis охват карты и сделал:
maxExtent: new OpenLayers.Bounds(15,12,195,111);

не помогает :(

У меня почему-то выводится все время охват всего глобуса. когда я меняю любые значения в new OpenLayers.Bounds - ничего не происходит.

Выкладываю еще 1 скриншот, внизу справа мини-карта ля навигации, на ней это особенно хорошо видно.

-------

когда я руками правлю запрос (взял его через ПКМ по изображению карты в браузере) и прописываю там нужный BBOX (http://localhost/cgi-bin/mapserv.exe?MA ... HEIGHT=256) - все ок становится....

Почему у меня не изменяется BBOX, хотя я задаю его в OpenLayers.Bounds?



-----------
АПДЕЙТ:

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

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

оказывается, параметры были верные... неверным был КОД )) javascript синтаксис )) как говорится, так программы не пишутся ))

всем спасибо за помощь! доволен аки слон, теперь буду привязывать другие слои )