最近,原项目中的openlayers2进行框架升级为openlayers3,因为openlayers3相当于进行了完全重构,导致项目升级遇到了一些问题。而网上大部分资料,对extent,center等参数讲解不详细,这里主要讲一下,在通过openlayers3获取geoserver服务器(WMS)中image底图时,具体步骤和需要注意的一些细节。
   
    
    
    一、首先,geoserver(版本2.5.5)地图发布。基本步骤不讲,主要两点:
   
    
    
    
    
    
    
    <1>增加数据源我选择的底图类型为WorldImage;
   
    
    
    
    
    
    
    <2>图层发布SRS设置为EPSG:4326;
   
    
    
    
    
    
    
    <3>图层图片为含有坐标数据的png
   
    
    
    
    
    
    
    配置好geoserver,地图发布成功。
   
    
    
    二、openlayers3中主要参数详解
   
    
    
    
    
    新建一个ol.map类,var map=new ol.map(options);而构造函数的参数options中与openlayer2区别很大。
   
    
    
    
    
    
    
    options中的主要三个参数:
   
    
    
    
    
    
    
    <1>target:存放地图的div,值为div的id
   
    
    
    
    
    
    
    <2>layers:图层数组,按数组顺序加载各图层。从geoserver获取wms图层主要是在这里面配置
   
    
    
    
    
    
    
    <3>view:图层展示,确定缩放级别zoom,
    
     展示中心点center等,而center的值,通过ol中的方法将地图坐标值进行转换获得。
    
   
代码示例:( 代码根据官方demo进行修改而成,地图为geoserver2.5.5中的示例地图,安装后已自动发布):
<!DOCTYPE html>
<html>
  <head>
    <title>Single Image WMS</title>
    <link rel="stylesheet" href="https://openlayers.org/en/v3.19.1/css/ol.css" type="text/css">
    <!-- The line below is only needed for old environments like Internet Explorer and Android 4.x -->
    <script src="https://cdn.polyfill.io/v2/polyfill.min.js?features=requestAnimationFrame,Element.prototype.classList,URL"></script>
    <script src="https://openlayers.org/en/v3.19.1/build/ol.js"></script>
  </head>
  <body>
    <div id="map" class="map"></div>
    <script>
	
      var extent=[-130.85168,20.7052,-62.0054,54.1141];//BBOX范围值
	  
      var projection=new ol.proj.Projection({//地图投影类型
		  code:'EPSG:4326',
		  units:'degrees',
		  extent:extent
	  });
	  
      var layers = [
        
        new ol.layer.Image({
          //extent:extent, //可注释
         
	  source: new ol.source.ImageWMS({
	    url: 'http://localhost:8000/geoserver/wms',
            params: {'LAYERS': 'nurc:Img_Sample','VERSION':'1.1.0'},
            serverType: 'geoserver'
          })
        })
      ];
	  
	  
	  
      var map = new ol.Map({
        layers: layers,
        target: 'map',
        
	view: new ol.View({
	    projection:projection,
            center:ol.extent.getCenter(extent), //<1>设置固定中心点
            zoom: 2
        })
      });
	  
	  //map.getView().setCenter(ol.extent.getCenter(extent));    // <2>动态设置中心点
    </script>
  </body>
</html>
    
    
    
     
      三、特别注意
     
    
   
    
    
    
    
    
    
    1.其中extent(ol2中的bounds)就是坐标范围值和geoserver地图图层发布中bbox(
    
     
      Bounding Box
     
    
    )的值对应一致。
   
    
    
    
    
    2.
    
     最重要的是
    
    :view投影中心点center的设置,有两种方法
   
    
    
    
    
    <1>直接在view中设置 (见代码中的<1>方法)
   
    
    
    
    
    <2>动态设置 (见代码中的<2>方法)
   
 
