Получение пустых плиток MapServer в OpenLayers 3

Я использую OL3 с mapserver... проблема у меня в том, что MapServer, кажется, работает нормально, у меня есть файл.map для "Состояний", как это...

MAP
IMAGETYPE      PNG24
CONFIG "PROJ_LIB" "C:/Program Files/MapServer/projlib/"
EXTENT         -180 -90 180 90
SIZE           256 256
FONTSET "E:/RCIS/Web/MapServerDlls/content/fontset.txt"
IMAGECOLOR     255 255 255
TRANSPARENT ON
PROJECTION 
 AUTO
END
            LAYER
                            GROUP "Base"
                            NAME "States"
                            TYPE POLYGON
                            STATUS ON
                            LABELCACHE ON 
                            PROCESSING 'LABEL_NO_CLIP=1' 
                            CONNECTIONTYPE PLUGIN
                            PLUGIN "msplugin_mssql2008.dll"
                            CONNECTION     "server=stbisqlr3.dvcorp.rcis.com,5208;uid=Mapping01D;pwd=9GreenSnap#4D;Initial Catalog=NATIONALDB;Integrated Security=False"
                            DATA "shape(geography),ST_NAME_MC from    NATIONALDB.sde.STATES USING INDEX STATES_SIDX USING UNIQUE STATES_ID USING   SRID=4269"
                            LABELITEM    "ST_NAME_MC"
                            CLASS
                                            STYLE                                     
                                             OUTLINECOLOR 000 153 000
                                            WIDTH 3
                                            END
                                            LABEL
                                                            COLOR 000 153 000
                                                            TYPE TRUETYPE
                                                            FONT Arial 
                                                            SIZE 12
                                                            ANTIALIAS FALSE
                                                            POSITION AUTO
                                                            PARTIALS FALSE
                                                            MINDISTANCE 2000
                                                            MINSCALEDENOM   20.00                                                               
                                            END
                            END                       
            PROJECTION 
                             AUTO
            END
            END       
END

И я строю свою карту как в OL3...

control.map = new ol.Map({
        target: 'map',
        renderer: 'canvas',
        layers: [],
        view: new ol.View({
            projection: 'EPSG:4326',
            center: [0, 0],
            zoom: 12
        })
    });

Создайте векторный слой, который определяет экстент, создает представление и показывает векторные объекты... который работает!!

vectorObjs.promise.then(function () {
        //Create empty extent
        var extent = ol.extent.createEmpty();
        //Loop through vector layers to add them to map and determine extent


        var totalExtent = ol.extent;

        angular.forEach(webMapValues.vectorFieldLayer, function (Field, key) {                

            control.map.addLayer(Field);
            extent = Field.getSource().getExtent();
            totalExtent = ol.extent.extend(extent, totalExtent);
        })

        control.map.getView().fit(totalExtent, control.map.getSize());



        var view = new ol.View({
            center: control.map.getView().getCenter(),
            zoom: 8,
            minZoom: 1,
            maxZoom: 19

        });
        control.map.view = view;

Затем я пытаюсь добавить слой состояний на карту, и кажется, что все работает, но я не вижу плитки состояний?

var States = new ol.layer.Tile({
            name: 'States',
            extent: totalExtent,
            source: new ol.source.TileWMS({
               url: 'http://dvfmweb2:80/mapserver/mapserv.exe?map=E:/RCIS/Web/Mapfiles/MappingBase.map&',
                params: { 'LAYERS': 'States', 'BBOX': totalExtent, 'TILED': true }

            })
        });

        control.map.addLayer(States);

Когда я выполняю вызов, я вижу несколько позиций в инструментах разработчика Chrome, указывающих плитки состояния, т.е.

Когда я получаю плитки обратно в хром, это полная информация. 1. Запросить URL:

http: //имя_сервера/mapserver/mapserv.exe? карта =E:/RCIS/Web/Mapfiles/MappingStates.map&&SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&FORMAT=image%2Fpng&TRANSPARENT=true&LAYERS=States&BBOX=47.318115234375%2C-109.423828125%2C47.3291015625%2C-109.412841796875&TILED=true&WIDTH=256&HEIGHT=256& СВК =EPSG%3A4326& ТИПОВ

  1. Метод запроса: GET

  2. Код состояния: 200 ОК

Дополнительная информация!!!

Когда я вставляю одну из ссылок, которые получают код возврата "200 Ok", я вижу ошибку, которая говорит...

<ServiceException code="InvalidSRS">
msWMSLoadGetMapParams(): WMS server error. Invalid CRS given : CRS must be  valid for all requested layers.
</ServiceException>

Однако я вижу только белое?

Любая помощь очень ценится, я слишком долго бился головой!!

-Bob

2 ответа

Вы можете только запросить CRS, который указан как поддерживаемый сервисом / уровнем. Итак, у вас была ошибка, потому что ваш слой не перечислил EPSG:4326 как поддерживается.

Чтобы перечислить несколько CRS как поддерживаемых, вам нужно добавить раздел METADATA на свой уровень (или службу, или оба), выражая поддерживаемую CRS, например:

METADATA
    "WMS_SRS" "CRS:84 EPSG:3857 EPSG:4269 EPSG:4326"
END

Это оказалось проблемой с файлом карты, созданным неправильно. Выше приведен файл карты, который работал, но требования должны быть изменены... ниже находится файл карты, который работает. Это может использоваться как шаблон для вашей системы... Пожалуйста, обратите внимание на все "ваши..." места в файле карты, которые вам нужно будет заполнить.

MAP
IMAGETYPE      PNG24
CONFIG "PROJ_LIB" "E:/your/path/to/projlib"
SIZE           256 256
FONTSET "E:/your/path/to/fontset.txt"
IMAGECOLOR     255 255 255
TRANSPARENT ON
PROJECTION 
 "init=epsg:4326"
END
WEB
  METADATA
    "wms_title" "states"
    "wms_enable_request"  "*"
  END
END
LAYER
    NAME "States"
    TYPE POLYGON
    STATUS ON
    LABELCACHE ON 
    PROCESSING 'LABEL_NO_CLIP=1' 
    CONNECTIONTYPE PLUGIN
    PLUGIN "msplugin_mssql2008.dll"
    CONNECTION      "server=YourServername.com,YourPort;uid=YouruserID;pwd=YourDBPassword;Initial    Catalog=YourDatabaseName;Integrated Security=False"
    DATA "shape(geography),YourStateColumnName from YourDatabaseName.STATES USING INDEX YourTableIndex USING UNIQUE YourStateIDColumn USING SRID=4269"
    LABELITEM    "YourStateNameColumn"
            PROCESSING "CLOSE_CONNECTION=DEFER"
    CLASS
        STYLE            
         OUTLINECOLOR 000 153 000
         WIDTH 3
        END
         LABEL
            COLOR 000 153 000
            TYPE TRUETYPE
            FONT Arial 
            SIZE 12
            ANTIALIAS FALSE
            POSITION AUTO
            PARTIALS FALSE

        END
    END     
    PROJECTION 
         "init=epsg:4326"
    END
END 
END

затем сохраните как States.map и укажите на него из своей WMS

Другие вопросы по тегам