Получение пустых плиток 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& ТИПОВ
Метод запроса: GET
Код состояния: 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