庆祝亚运会

声明:文章为本人原创,转载或使用请注明作者和出处!!谢谢!

如果不是专业的地图工作者,看到地图,可能觉得地图就是一张将三维世界映射到二维空间,很多信息混杂在一起表示空间信息的动态可交互图片,其实这只是表面现象。实际上地图是由一个或多个图层组成的,使用不同的图层存储不同类型的地物,比如由存储道路的图层,有展示拥堵情况的图层,通常还有一个含有基础地理信息(比如政区划分)的底图图层。

在 OpenLayers 中,图层是使用 layer 对象表示的,主要有 热度图层(heatmaplayer)、图片图层(imagelayer)、切片图层(tilelayer) 和 矢量图层(vectorlayer) 四种类型,它们都是继承 Layer 类的。

1、Layer 类

OpenLayers 初始化一幅地图(map),至少需要一个可视区域(view),一个或多个图层( layer), 和 一个地图加载的目标 HTML 标签(target),其中最重要的是图层( layer)。

在 这里 可以看到 layer 类的定义,类的描述如下:

/** * @classdesc * Abstract base class; normally only used for creating subclasses and not * instantiated in apps. * A visual representation of raster or vector map data. * Layers group together those properties that pertain to how the data is to be * displayed, irrespective of the source of that data. */

layer 是一个虚基类,只用于让子类型继承和实现,自身不能实例化。主要功能是对 矢量地图数据 和 栅格地图数据的可视化表达。图层的外观,主要与数据渲染方式有关,,与数据的来源关系不大。

初始化时,传入的参数有:

包含的共有方法有: – getLayersArray( ),得到所有图层组成的数组; – getLayerStatesArray( ),得到所有图层状态组成的数组; – getSource( ),得到相应图层的来源; – getSourceState( ),得到相应图层的来源状态; – handleSourceChange_( ),处理 source 变动的函数; – handleSourcePropertyChange_( ),处理 source 属性变动的函数; – setSource( ),设置图层 source 属性,参数为一个 source 对象。

包含的私有方法有: – visibleAtResolution( ),参数是 layerState 和 resolution,如果图层可见,返回 true ,如果传入了 resolution,也会比较 resolution 是否在 minResolution 和 maxResolution 之间。

在构造函数传入的参数中,source 是一个比较重要的属性,没有它,图层就没有实质性内容,这个 source 是什么呢,打开 ol.source 目录可以看到,有一个 source 基类,其余都是继承其的子类,这些子类非常的多:

imagesource.js(imagelayer的图层来源基类)

tilesource.js(切片图层 – tilelayer的来源基类)

tileimagesource.js xyzsource.js,一个具有 XYZ 格式的数据集

vectorsource.js(vectorlayer的图层来源基类)

clustersource.js

wmssource.js,包含了 geoserver 、geoserver 、geoserver 和 geoserver 等,这些地图服务器发布的基于 WMS 协议的图层服务

地图图层数据的来源有很多,同时格式也各异。实际应用,应该根据实际情况进行选择。

2、各类图层类型

在 OpenLayers 3.x 中的 Layer 类型包括 heatmaplayer、imagelayer、tilelayer 和 vectorlayer 四种类型,它们都继承了 ol.layer.Layer 类,监听和触发的事件都在 ol.render.Event 中定义,共用的属性和状态都是在 layerbase 中定义的,它们除了从ol.layer.Layer 类继承而来的参数外,还定义了自己的属性和方法。下面我们来分别看看这几个图层类型。

PS: 我们基于以前的代码,在 中有下载源码链接,修改 map_utils.js 中的 map 来查看效果。

不管使用什么图层类型,初始化 map 同时,如果不明确指定 control 对象,那么就会默认包含 缩放 和 鼠标拖拽 功能,关于这个 Control 对象,在后面的博客中会讲到,现在认为 Control 就是一个控制与地图交互的工具就好。

2.1 heatmaplayer

将矢量数据渲染成热度图的类,继承了 ol.layer.Vector 类,ol.layer.Vector 继承了ol.layer.Layer 类, 额外的参数是 olx.layer.HeatmapOptions ,其定义如下:

/** * @enum {string} */ol.layer.HeatmapLayerProperty = { BLUR: ‘blur’, GRADIENT: ‘gradient’, RADIUS: ‘radius’};

注意到 heatmap 图层比起其它类型的图层多了三个属性,常用的是 blur 和 radius,这两个属性什么作用呢,我们可以调整一下看看效果:

没错,blur 控制圆点的边缘,对边缘做模糊化; radius 则规定了圆点的半径。注:并不是点,而是圆。

2.1.1实例

首先创建一个 heatmaplayer 对象:

var vector = new ol.layer.Heatmap({ source: new ol.source.KML({url: ‘data/kml/2012_Earthquakes_Mag5.kml’,projection: ‘EPSG:3857’,extractStyles: false }), blur: parseInt(blur.value, 10), radius: parseInt(radius.value, 10)});

这里 heatmap 使用KML格式,本地文件data/kml/2012_Earthquakes_Mag5.kml 作为 heatmap 的来源,数据是2012年全球地震发生的位置和震级等简单的描述信息,然后将 heatmap 图层加到 map 中:

map = new ol.Map({ //初始化maptarget: ‘map’,layers: [new ol.layer.Tile({source: new ol.source.MapQuest({layer: ‘sat’})}),heatmap],view: new ol.View({center: ol.proj.transform([37.41, 8.82], ‘EPSG:4326’, ‘EPSG:3857’),zoom: 4})});

查看运行效果:

2.2 imagelayer

主要是指服务器端渲染的图像,可能是已经渲染好的图像,或者是每一次请求,都根据请求内容定制化地生成一幅图片,该图层类型支持任意的范围和分辨率。

2.2.1 实例也有伤心的,既有令人兴奋的,也有令人灰心的,

庆祝亚运会

相关文章:

你感兴趣的文章:

标签云: