НЕ отображается слой поверх OSM
-
- Интересующийся
- Сообщения: 18
- Зарегистрирован: 25 мар 2011, 10:36
- Репутация: 1
НЕ отображается слой поверх OSM
Добрый день.
Необходимо отобразить 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. Я так понял, что необходимо провести преобразование слоя в другую систему координат. Но как это сделать - не представляю ввиду того, что с openlayers столкнулся совсем недавно. В базе слой хранится, как я понял, в системе 4326.
Заранее благодарю за помощь.
Необходимо отобразить 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. Я так понял, что необходимо провести преобразование слоя в другую систему координат. Но как это сделать - не представляю ввиду того, что с openlayers столкнулся совсем недавно. В базе слой хранится, как я понял, в системе 4326.
Заранее благодарю за помощь.
- Mavka
- Гуру
- Сообщения: 2060
- Зарегистрирован: 14 мар 2008, 17:36
- Репутация: 9
Re: НЕ отображается слой поверх OSM
В map-файле добавьте проекцию 900913:
Код: Выделить всё
wms_srs "epsg:4326 epsg:900913"
лангольеры под окном жрали время ом-ном-ном
-
- Интересующийся
- Сообщения: 18
- Зарегистрирован: 25 мар 2011, 10:36
- Репутация: 1
Re: НЕ отображается слой поверх OSM
Вот листинг мапфайла
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
Так же делал первый раз, так что за косяки не судите строго.
Если на прямую к нему обращаться - вроде работает нормально...
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
Так же делал первый раз, так что за косяки не судите строго.
Если на прямую к нему обращаться - вроде работает нормально...
- Mavka
- Гуру
- Сообщения: 2060
- Зарегистрирован: 14 мар 2008, 17:36
- Репутация: 9
Re: НЕ отображается слой поверх OSM
Кроме того что на уровне MAP проекцию нужно исправить (странно, что он у вас "работает нормально")
ошибок не вижу. Попробуйте включить отладку.
Из кода OpenLayers уберите (дублирует url) всю строку:
Код: Выделить всё
PROJECTION
"init=epsg:4326"
END
Из кода OpenLayers уберите (дублирует url) всю строку:
Код: Выделить всё
map: 'http://...ru/cgi-bin/mapserv?map=/var/www/1.map&',
лангольеры под окном жрали время ом-ном-ном
-
- Интересующийся
- Сообщения: 18
- Зарегистрирован: 25 мар 2011, 10:36
- Репутация: 1
Re: НЕ отображается слой поверх OSM
В инструкции было написано указать в мапфайле следующие параметры проекции:
"proj=latlong"
"ellps=WGS84"
"datum=WGS84"
"init=epsg:4326"
Если не трудно - поясните - что здесь для чего и что лишнее?
"proj=latlong"
"ellps=WGS84"
"datum=WGS84"
"init=epsg:4326"
Если не трудно - поясните - что здесь для чего и что лишнее?
- Mavka
- Гуру
- Сообщения: 2060
- Зарегистрирован: 14 мар 2008, 17:36
- Репутация: 9
Re: НЕ отображается слой поверх OSM
То, что у вас прописано не "init=epsg:4326", а "init=epsg:900913"
И проекцию нужно указывать или:или
И проекцию нужно указывать или:
Код: Выделить всё
"proj=latlong"
"ellps=WGS84"
"datum=WGS84"
Код: Выделить всё
"init=epsg:4326"
лангольеры под окном жрали время ом-ном-ном
-
- Интересующийся
- Сообщения: 18
- Зарегистрирован: 25 мар 2011, 10:36
- Репутация: 1
Re: НЕ отображается слой поверх OSM
Спасибо. Понял. Но не смотря на все изменения , слой по прежнему не оттображается.
По прежнему выдает ошибку :
По прежнему выдает ошибку :
-
- Интересующийся
- Сообщения: 18
- Зарегистрирован: 25 мар 2011, 10:36
- Репутация: 1
Re: НЕ отображается слой поверх OSM
Забыл уточнить. При работе с гуглом в качестве подложки - все работает отлично.
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}
);
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}
);
- Mavka
- Гуру
- Сообщения: 2060
- Зарегистрирован: 14 мар 2008, 17:36
- Репутация: 9
Re: НЕ отображается слой поверх OSM
1. Как вы должно быть заметили, ошибка не так же самая, а другая.
2. Проверять работу WMS лучше в настольной ГИС (qgis).
3. Смотрите какие запросы уходят из OL на сервер.
4. Смотрите логи отладки.
5. В гугло-слое вы использовали reproject. Это совершенно другой механизм перепроецирования.
Почитайте.
2. Проверять работу WMS лучше в настольной ГИС (qgis).
3. Смотрите какие запросы уходят из OL на сервер.
4. Смотрите логи отладки.
5. В гугло-слое вы использовали reproject. Это совершенно другой механизм перепроецирования.
Почитайте.
лангольеры под окном жрали время ом-ном-ном
-
- Интересующийся
- Сообщения: 18
- Зарегистрирован: 25 мар 2011, 10:36
- Репутация: 1
Re: НЕ отображается слой поверх OSM
Итак, при активном участии Mavka (за что я безмерно благодарен), вопрос решен.
В данном случае проблема заключалась в отсутствии необходимой проекции, а именно:
Нужно было найти папку с файлами проекций. В OSGeo4W это 'c:\OSGeo4W\share\proj\', в Linux можно искать по файлу 'epsg'. Далее НУЖНО (для надежности) во все три файла - epsg, esri, esri.extra прописать первой строкой:
После чего у меня все заработало. Всем удачи.
В данном случае проблема заключалась в отсутствии необходимой проекции, а именно:
Нужно было найти папку с файлами проекций. В 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 <>
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость