OpenLayers中TileWMS和ImageWMS的使用说明

         GeoServer中发布的WMS服务,使用OpenLayers显示后,发现加载的地图是切片的,这让我很疑惑:是GeoServer中发布的WMS服务有问题,还是OpenLayers中加载WMS的方式有问题?带着这样的疑问,我开始查看OpenLayers API中关于WMS的说明。

        1、以TileWMS方式加载WMS服务

var wmsParam = {      
            'LAYERS': layer,//此处可以是单个图层名称,也可以是图层组名称,或多个图层名称  
            'TILED':false,
            'VERSION': '1.1.0',
            'BBOX': [89.17, 3.37, 135.31, 53.81],
            'SRS': proj   
        };
var layer = new ol.layer.Tile({      
                    source:new ol.source.TileWMS({ //切片WMS服务,多个标注    
                        url: url,
                        //crossOrigin: 'anonymous',      
                        params: wmsParam,      
                        serverType:'geoserver'    //服务器类型  
                    })     
            });

        上述加载方式,WMS地图服务正常叠加在天地图底图上,但是有一个问题:WMS服务中自定义的标注随着地图的方法会出现多次,这让我看到问题,发现加载的地图是切片的。

        在数据源的参数params中,将TILED设置为false(意为不切片),这种设置对不加载切片没有效果,因为在layer中已经设置为Tiled,数据源也是TileWMS类型,他们结合起来以切片的形式加载WMS地图服务。

    2、以ImageWMS方式加载WMS服务

var wmsParam = {      
            'LAYERS': layer,//此处可以是单个图层名称,也可以是图层组名称,或多个图层名称  
            'TILED':false,
            'VERSION': '1.1.0',
            'BBOX': [89.17, 3.37, 135.31, 53.81],
            'SRS': proj   
        };
wms.layer = new ol.layer.Image({      
                source:new ol.source.ImageWMS({      
                        url: url,
                        //crossOrigin: 'anonymous',      
                        params: wmsParam,      
                        serverType:'geoserver'    //服务器类型  
                    })     
                });

        发现上述WMS地图服务是以切片方式加载的问题后,我再API中找到了WMS的另一种数据源:ol.source.ImageWMS,它对应的图层类型是ol.source.Image。以这种方式加载,解决了标注因切片出现多次的问题,这才是真正意义上的WMS服务。

        3. 关于两者使用的说明

        从上面的代码说明,对于WMS服务,OpenLayers有两种加载方式:

       (1)切片方式(TileWMS):动态地图在GIS Server生成后,以切片的方式返回到前端,优点是将地图切分,每个切片的数据量很小,便于数据的传输,适用于网络状况不佳的环境;缺点是在地图切片的过程中,可能会造成我遇到的 标注多次出现的问题。

       (2)图像方式(ImageWMS):地图生成后,直接以一个整体返回到前端显示,优点是不会出现标注重复出现的问题,确定是对网络状况不佳的环境,可能出现请求失败的问题。

        具体使用哪种加载方式,应结合具体情况分析。

你可能感兴趣的:(GeoServer,OpenLayer3)