我使用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.请求网址:
/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%2C-109.423828125%2C47.3291015625%2C-109.412841796875&TILED=true&WIDTH=256&HEIGHT=256&CRS=EPSG%3A4326&STYLES
附加信息!
当我粘贴其中的一个链接,得到一个"200确定“的返回代码,我可以看到一个错误,说.
<ServiceException code="InvalidSRS">
msWMSLoadGetMapParams(): WMS server error. Invalid CRS given : CRS must be valid for all requested layers.
</ServiceException>但是我只看到了白色?
任何帮助都是非常感谢的,我已经把头撞在这上面太久了!!
-Bob
发布于 2016-09-30 16:03:51
事实证明,这是映射文件没有正确构造的问题。上面的是一个有效的映射文件,但是需求必须有changed...below是一个工作的映射文件。这可以用作你的system...Please的模板,注意所有的“你的.”需要填写的地图文件中的位置。
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中指向它。
发布于 2017-03-12 12:03:09
您只能请求被服务/层支持的CRS。所以您有了错误,因为您的层没有列出支持的EPSG:4326。
要列出支持的多个CRS,您需要向您的层(或服务,或两者)添加一个元数据部分,以表示支持的CRS,如:
METADATA
"WMS_SRS" "CRS:84 EPSG:3857 EPSG:4269 EPSG:4326"
ENDhttps://stackoverflow.com/questions/38414024
复制相似问题