3.2 OpenLayers 5的API概要
首先,我们可以从OpenLayers官网的API来了解和分析它的结构,网址为http://openlayers.org/en/latest/apidoc/index.html。OpenLayers基于面向对象设计,由JavaScript实现,其命名空间的类较多,类与类之间的继承关系复杂,结构体系庞大。图3-8所示为OpenLayers官网的API,下面将依次介绍各个类。
图3-8 OpenLay ers官网的API
OpenLayers 5的API中类的总体结构如图3-9所示。
图3-9 OpenLay ers 5的API中类的总体结构
1.核心的类
● Map(ol.Map):地图容器,核心部分,可加载各类地图与功能控件,用于渲染、表现动态地图。
● WebGLMap(ol.WebGLMap):使用WebGL进行渲染的地图容器,使用WebGL渲染地图图层,但是该容器对矢量数据的支持有限,目前不支持矢量瓦片数据。
● View(ol.View):地图视图,控制地图缩放等基本交互,以及地图投影坐标系、地图中心点、分辨率、旋转角度等。
● Layers(ol.Layer.Base):图层,包含多个调用数据的子类,由子类的实例加载地图数据,必须结合图层数据源匹配使用。
● Sources(ol.source.Source):图层数据源,与图层子类对应,由图层数据源的实例来加载各种类型的地图数据。
● Format(ol.format.Feature):数据解析类,此类用于读/写各种格式的数据,并创建了多种格式的子类,即数据解析器。目前支持多种数据格式,如GeoJSON、GML、XML、WKT、WFS等。
● Geometry(ol.geom. G eometry):地理空间对象的几何实体,由其子类(如Point、LineString、Polygon)的实例构成所看到的矢量地图。
● Feature(ol. Feature):地图要素,可看成矢量地图的组成单元,是地图中的主要部分。例如,点、线、面等几何实体均为地图要素,可配合要素的样式渲染到客户端的地图上。
● Overlay(ol.Overlay):叠加层,即叠加到地图上显示的要素,关联了一个自定义的HTML元素,由一个单一的地图坐标点确定叠加位置。与控件类似,但不同的是叠加元素不是在一个固定的屏幕位置上,而是通过关联一个地图逻辑坐标点跟随地图移动,如标注点、popup等。
● Controls(ol.control.Control):即通常所说的控件类,可提供各种各样的地图功能控件,如地图缩放控件(Zoom)、鼠标位置控件(MousePosition)、鹰眼(OverViewMap)、比例尺(ScaleLine)等。
● Interaction(ol.interaction.Interaction):地图交互控件类。地图交互一般是通过鼠标与键盘进行的,因此Interaction的子类为基于鼠标与键盘操控的地图交互功能控件,如选择要素控件(Select)、键盘缩放地图控件(KeyboardZoom)、鼠标控件基类(Pointer)下的绘制控件(Draw)、修改控件(Modify)、拖放平移地图控件(DragPan)等。
● Style(ol.style.Style):样式类,可通过其子类实例来渲染矢量要素的样式,包括填充样式(Fill)、边界样式(Stroke)、图标样式(Image与Icon)、文字样式(Text)等。
● Projections(ol.pro.Projection):地图投影定义类,包括EPSG:4326(ol.proj.EPSG4326)与EPSG:3857(ol.proj.EPSG3857)的定义,用于在地图视图(View)中设置地图的投影坐标系,可通过ol.proj提供的方法进行投影变换。
● Renderer(ol.renderer.Renderer):渲染器。在OpenLayers 5中,渲染功能是作为Map类的一个属性存在的,支持Canvas与WebGL两种渲染方式,可通过设置Map类的renderer属性设定渲染方式。
2.类的事件
● ol.MapEvent:地图事件类,继承于ol.events.Event,其子类为ol.MapBrowserEvent,可查看ol.Map中有哪些事件触发了地图事件,如单击(click)、双击(dblclick)、鼠标拖曳(pointerdrag)、鼠标移动(pointermove)、单次单击(singleclick)等事件可触发地图浏览器事件(ol.MapBrowserEvent),而移动结束(moveend)事件等可触发地图事件。
● ol.Object.Event.:ol.Object的事件,继承于ol.events.Event,可以提供属性变更事件(Propertychange),当属性发生变更时触发此事件。
另外,还有地图交互绘制事件(ol.interaction.Draw.Event)、交互选择事件(ol.interaction.Select.Event)、集合事件(ol.Collection.Event)、地图渲染事件(ol.render.Event)等,具体说明可查看OpenLayers 5的API。
3.其他组件
● ol.Tile:瓦片基类,包括ol.ImageTile栅格瓦片子类和ol.VectorTile矢量瓦片子类,提供的getTileCoord方法可获取瓦片的坐标信息,其中ol.ImageTile子类提供的getImage方法可获取瓦片的HTML图像元素(可能是一个Canvas、Image、Video), ol.VectorTile子类提供的getFeatures方法可获取瓦片的要素信息。
● ol.Image:图像类,继承于ol.ImageBase,提供的getImage方法可获取HTML图像元素(可能是一个Canvas、Image、Video)。
● ol.Collection:集合类,扩展的JS数组,提供针对集合操作的简便方法,如add方法与remove方法都将引发集合变更事件。
● ol.Geolocation:地理位置,提供HTML5地理定位功能的辅助类,提供的接口可实现导航定位功能。
● ol.Graticule:网格标线,用于在地图上绘制坐标系的网格。
其他类在此不再介绍,具体可以参考OpenLayers官网的API。