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

Я использую OL3 с картографическим сервером ... проблема в том, что 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? map = E: /RCIS/Web/Mapfiles/MappingStates.map&&SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&FORMAT=image%2Fpng&TRANSPARENT=true&LAYERS=States&BBOX=47.318115234375%258108C&BBOX=47.318115234375%252C08C08_05_05_04_05_05_05_05_05_05_05_05_05_05_05_05 256 & CRS = EPSG% 3A4326 & СТИЛИ

  1. Метод запроса: ПОЛУЧИТЬ

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

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

Когда я вставляю одну из ссылок с кодом возврата «200 Ok», я вижу ошибку, в которой говорится ...

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

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

Любая помощь приветствуется, я слишком долго бился об этом !!

-Боб


person Funn_Bobby    schedule 16.07.2016    source источник
comment
Я не использовал MapServer, поэтому не уверен, поможет ли это, но думаю, что он может быть придирчивым к параметру СТИЛЬ. Я рекомендую проверить, применяется ли стиль по умолчанию или требуется ли имя стиля явно. Кроме того, хорошей идеей может быть игра со стилем. Вы можете скопировать конфигурацию рабочего слоя и посмотреть, изменится ли она что-нибудь.   -  person x82    schedule 16.07.2016
comment
в вашем файле карты я могу видеть SRID=4269, в то время как ваша карта ol3 проецируется на 4326. Я не знаком с картографическим сервером, упомяните об этом на всякий случай   -  person pavlos    schedule 17.07.2016


Ответы (2)


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

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

person Funn_Bobby    schedule 30.09.2016

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

Чтобы указать несколько поддерживаемых CRS, вам необходимо добавить раздел МЕТАДАННЫЕ на свой уровень (или службу, или и то, и другое), выражающий поддерживаемую CRS, например:

METADATA
    "WMS_SRS" "CRS:84 EPSG:3857 EPSG:4269 EPSG:4326"
END
person user27874    schedule 12.03.2017