在ol3中通过Map Sever渲染错误地提供WMS图层

时间:2015-11-05 08:31:18

标签: javascript openlayers wms mapserver

我使用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'
     })
});

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请求格式或地图文件有什么问题吗?

1 个答案:

答案 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”进行搜索