地图服务器提供的 WMS 图层在 ol3 中渲染不正确

3
我使用OpenLayers3创建了一个地图,其中包含两个图层。第一层是Open Street Map Layer,第二层是由Map Server提供的WMS图层。
问题- 当我渲染第一层时,它会正确地渲染,没有问题。但是当我渲染第二层(由地图服务器提供)时,它会不正确地渲染,意味着它不适合其容器,并且在位置上与第一层不同步。请参见this snapshot中的地图截图以获得更多澄清。在快照中,顶部图层是由地图服务器提供的wms层。

enter image description here

同时当我缩放或移动地图时,两个图层都能正常工作,但几秒钟后第二个图层(来自地图服务器的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'
     })
});

是我的地图文件。

  地图
  名称 "世界"
  配置 "MS_ERRORFILE" "/home/neelesh/Projects/georbis/data/logs/mapservice_errors.log"
  配置 "PROJ_LIB" "/home/neelesh/Projects/georbis/deps/proj.4-master/share/proj"
  配置 "ON_MISSING_DATA" "LOG"
  调试 5
  范围 -180.000 -90.000 180.000 90.000
  形状路径 "/home/neelesh/Projects/georbis/data/service_data/data/wms"
  图像颜色 255 255 255
  尺寸 1350 675
网络 元数据 "wms_title" "Georbis WMS服务器" "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" 结束 结束
投影 "init=epsg:4326" 结束
图层 名称 世界 类型 RASTER 数据 "world.tif" 元数据 "wms_title" "BlueWorld地图" "wms_srs" "epsg:4326" "wms_server_version" "1.1.1" 结束 投影 "init=epsg:4326" 结束 结束 结束
我尝试使用ol.view.fit方法将图层适应其容器,但是该图层的layer.getExtent()值为未定义。
请帮助我找出问题所在。WMS请求格式或地图文件是否存在问题?
1个回答

2
这是因为您将MapServer配置为仅支持EPSG 4326。它应该支持EPSG 3857(OSM瓷砖)。您应该将“wms_srs”“epsg:4326”更改为“wms_srs”“EPSG:4326 EPSG:3857”(请参见官方WMS服务器文档)。您可以通过进行GetCapabilities请求来确认它是否有效。
当您使用GeoServer时,默认情况下,它支持WMS的所有投影(因此它可以工作,因为您的WMS图像是使用EPSG 3857请求的)。
您应该知道,现在您也可以在OpenLayers中对客户端进行栅格重投影。有关一些演示,请转到http://openlayers.org/en/v3.11.0/examples/并搜索关键字“reprojection”。

是的,wms_srs出了问题,但即使修复了它,它仍然无法工作。仍然面临着相同的问题。 - Neelesh
你在网络面板中调试过了吗?看看图像的调用是否有效?这是为了查看是否有任何WMS调用以及返回的内容是否真的是图像。 - Thomas Gratier

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接