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

OpenLayers WMS+разные подложки

Добавлено: 04 сен 2012, 11:40
Malig
Создал WMS на MS4W 3.0.6 на локальной машине.

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

MAP
        NAME           "WMS"
        STATUS         ON
        IMAGETYPE      PNG
        EXTENT         37.6825 44.3103 40.6413 55.5705
        SIZE 800 2048
        UNITS DD
        IMAGECOLOR     255 255 255
    FONTSET "./fonts/fonts.list"

        WEB
            TEMPLATE  './templates/template.html'
            IMAGEPATH '/ms4w/tmp/ms_tmp/'
            IMAGEURL  '/ms_tmp/'

            METADATA
                    wms_enable_request "*"
                    wms_title                  "GIS-LAB Demo"
                    wms_abstract               "This is the WMS demo from GIS-Lab"
                                                
                    wms_onlineresource         "http://localhost/cgi-bin/mapserv.exe?map=/ms4w/apps/example/wms - mezhuzl.map&"
                    wms_srs                    "EPSG:4326"
                    wms_getfeatureinfo         "http://localhost/cgi-bin/mapserv.exe?map=/ms4w/apps/example/wms - mezhuzl.map&"
                    wms_featureinfoformat      "text/plain"
            END
        END

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

        LAYER 
                NAME         veget
                CONNECTIONTYPE postgis
                CONNECTION "user=postgres password=123 dbname=postgis host=localhost"
                DATA "the_geom from roadmezhuzl"
                STATUS       ON
                TYPE         LINE
                
                PROJECTION
                    "proj=latlong"
                    "ellps=WGS84"
                    "datum=WGS84"
                END

                CLASS
                    NAME       "Ось дороги"
                    STYLE
                        COLOR        5 115 253
                        OUTLINECOLOR 32 32 32
                    END
                END

                METADATA
                    wms_title         "Countries 1"
                    wms_abstract      "Countries 1 test"
                    wms_srs           "EPSG:4326"
                    wms_include_items "all"
                END
        END # Конец определения слоя

END # Конец определения карты
В браузере по ссылке http://localhost/cgi-bin/mapserv.exe?ma ... t&mode=map работает. В Quantum GIS подключаю слой WMS - работает.
Подключаю через OpenLayers

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

var map, select;

var lat=60;
var lon=80;
var zoom = 5;

function init(){
    var OSM_map = new OpenLayers.Layer.OSM("OpenStreetMap");
    var gmap = new OpenLayers.Layer.Google("Google Streets", {visibility: false});
    var Y_map = new OpenLayers.Layer.Yandex("Yndex",{sphericalMercator: true, visibility: false});

    var wms = new OpenLayers.Layer.WMS("Layer", "http://localhost/cgi-bin/mapserv.exe?map=/ms4w/apps/example/wms - mezhuzl.map&", 
            {transparent: 'true', layers: 'veget', format: 'png'}, 
            {isBaseLayer:false});


    var mapoptions = {
        projection: "EPSG:900913",
        sphericalMercator: true,
        units: "m", 
        numZoomLevels:18,
        maxResolution: 156543.0339,
        maxExtent: new OpenLayers.Bounds(-128 * 156543.0339, -128 * 156543.0339, 128 * 156543.0339, 128 * 156543.0339)
    }; 

    map = new OpenLayers.Map("map", mapoptions);
    map.addLayers([OSM_map, gmap, Y_map, wms]);

    var lonLat = new OpenLayers.LonLat(lon, lat).transform(new OpenLayers.Projection("EPSG:4326"), new OpenLayers.Projection("EPSG:900913"));
    map.setCenter (lonLat, zoom);
    
    map.addControl(new OpenLayers.Control.LayerSwitcher());
}
Подложки отображаются. А WMS заливает красным. Предполагаю что дело Bounds и проекциях, но совершенно не понимаю какие задавать.

Re: OpenLayers WMS+разные подложки

Добавлено: 04 сен 2012, 14:04
Denis Rykov
Тут всё понятно. Ваш WMS настроен таким образом, что может отдавать данные только в EPSG:4326, а судя по клиентскому коду OL, запрос уходит на сервер с указанием проекции EPSG:900913. Добавьте поддержку нужной проекции на сервере и всё должно заработать. Чтобы в следующий раз не гадать в чём причина ошибки - посмотрите в фаербаге URL запроса, уходящего к WMS, вставьте его в адресную строку браузера и перейдите, если на сервере произойдёт ошибка - он вернёт вам XML-документ, который нужно сохранить и затем открыть в текстовом редакторе и прочитать сообщение об ошибке.

Re: OpenLayers WMS+разные подложки

Добавлено: 05 сен 2012, 05:50
Malig
Добавил в map-файл

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

wms_srs                    "EPSG:4326 epsg:900913"
Результат тотже, но ошибка изменилась:

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

msProcessProjection(): Projection library error. no options found in 'init' file

Re: OpenLayers WMS+разные подложки

Добавлено: 05 сен 2012, 07:32
Malig
Проблему решил
Нужно в 'C:\ms4w\proj\nad'. В файлах - 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 <>  
Чтобы в следующий раз не гадать в чём причина ошибки - посмотрите в фаербаге URL запроса, уходящего к WMS, вставьте его в адресную строку браузера и перейдите
Я так пытался делать, но для скачивания предлагался файл с расширением exe, это меня почему то смущало, и уж никак я не мог догадаться, что это xml и открыть его в редакторе:)

Спасибо Denis Rykov , вопрос решен!