我使用OpenLayers3创建了一个包含两个图层的地图。第一层是Open Street Map Layer,第二层是Map Server提供的WMS层。
问题 - 当我渲染第一层时,它正确渲染没有问题。但是当我渲染第二层(由地图服务器提供)时,渲染错误意味着它不适合其容器,并且就位置而言与第一层不同步。有关详细说明,请参阅地图的this snapshot。在快照顶层是由地图服务器提供的wms层。
此外,当我缩放或移动地图时,两个图层都能正常工作,但在延迟几秒后,第二层(地图服务器的wms图层)再次切换回其初始位置(上面显示的位置)快照)。
这是我用来使用wms服务的代码。
var layer = new ol.layer.Image({
source: new ol.source.ImageWMS({
url: 'http://localhost:19090/rasters/world/wms',
params: {
'LAYERS': 'world',
'mode': 'map',
},
serverType: 'mapserver'
})
});
This是我的地图文件。
MAP NAME "world" CONFIG "MS_ERRORFILE" "/home/neelesh/Projects/georbis/data/logs/mapservice_errors.log" CONFIG "PROJ_LIB" "/home/neelesh/Projects/georbis/deps/proj.4-master/share/proj" CONFIG "ON_MISSING_DATA" "LOG" DEBUG 5 EXTENT -180.000 -90.000 180.000 90.000 SHAPEPATH "/home/neelesh/Projects/georbis/data/service_data/data/wms" IMAGECOLOR 255 255 255 SIZE 1350 675 WEB METADATA "wms_title" "Georbis WMS Server" "wms_author" "VizExperts" "wms_onlineresource" "http://192.168.1.36:19090/rasters/world/wms?" "wms_enable_request" "*" "wms_srs" "EPSG:4326 EPSG:3857" "wms_feature_info_mime_type" "text/html" "wms_format" "image/jpg" END END PROJECTION "init=epsg:4326" END LAYER NAME world TYPE RASTER DATA "world.tif" METADATA "wms_title" "BlueWorld Map" "wms_srs" "epsg:4326" "wms_server_version" "1.1.1" END PROJECTION "init=epsg:4326" END END END
我尝试 ol.view.fit 方法将图层适合其容器,但 layer.getExtent()。图层的未定义。
请求帮助我找出问题所在。 wms请求格式或地图文件有什么问题吗?
答案 0 :(得分:1)
这是因为您将MapServer配置为仅支持EPSG 4326.它应该支持EPSG 3857(OSM磁贴)。您应该将"wms_srs" "epsg:4326"
更改为"wms_srs" "EPSG:4326 EPSG:3857"
(请参阅official WMS server doc)。您可以确认它有效GetCapabilities request。
当您使用GeoServer时,默认情况下,它支持WMS的所有投影(因此可以使用EPSG 3857请求您的WMS图像)
您应该知道,现在您也可以在OpenLayers中对客户端进行光栅重投影。对于某些演示,请转到http://openlayers.org/en/v3.11.0/examples/并使用关键字“reprojection”进行搜索