OpenLayers 地图事件探究

关注我,带你一起学GIS ^

注:当前使用的是 ol [9.2.4] 版本,天地图使用的key请到天地图官网申请,并替换为自己的key

地图事件贯穿于WebGIS开发的始终,用于实现地图与用户的交互操作。地图缩放、移动使用MapEvent事件;图层渲染、状态使用RenderEvent事件;要素绘制、选择使用DrawEvent、SelectEvent事件。

1. OpenLayers事件结构图

OpenLayers框架事件类型众多,我根据事件类型将其划分为地图事件、渲染事件、数据源事件、控制事件、集合事件、对象事件和定位事件,如下图所示。其中常用的事件包括地图事件,渲染事件和数据源事件以及控制事件。所有的事件都继承于Event类,具有targettype属性,以及preventDefaultstopPropagation方法,还包括changeerror两个基本事件类型。

Event(ol.Event)

属性

描述

target{Object}

事件目标

type{String}

事件类型

方法

描述

preventDefault

阻止默认事件

stopPropagation

阻止事件冒泡传递

事件

描述

change

通用变更事件,当修改计数器增加时触发

error

通用错误事件,当错误发生时触发

2. Map事件(MapBrowserEvent)

MapBrowserEventMapEvent的子类,具有大量的事件和属性。包括地图加载、缩放和平移等操作。具有coordinate、dragging、map等属性,扩展了click、dbclick、loadstart、loadend等事件类型。

MapBrowserEvent(ol.MapBrowserEvent)

属性

描述

coordinate{Coordinate}

与原始浏览器事件对应的坐标。如果设置了,这将出现在用户投影中。否则,它将出现在视图投影中。

dragging{boolean}

表明当前地图是否正在拖动。仅为POINTERDRAG and POINTERMOVE事件设置,默认为false

frameState(FrameState)

当前渲染帧状态

map{Map}

当前事件发生时的地图对象

originalEvent

原始浏览器事件

pixel{Pixel}

相对于与原始事件对应的视口的地图像素。

target{Object}

事件目标

type{String}

事件类型

方法

描述

preventDefault

阻止默认事件

stopPropagation

阻止事件冒泡传递

事件

描述

click

单击事件

singleclick

真正的单击事件

dbclick

双击事件

loadstart

当开始加载其他地图数据(切片、影像、要素)时触发

loadend

当加载其他地图数据完成时触发

movestart

当开始移动地图时触发

moveend

当结束地图移动时触发

pointerdrag

当指针拖动时触发

pointermove

当指针移动时触发。触摸设备上,在地图平移时触发

postrender

在渲染地图帧后触发

change

通用变更事件,当修改计数器增加时触发

error

通用错误事件,当错误发生时触发

3. 渲染事件

ol.event.RenderEvent渲染事件类,控制图层加载、渲染以及错误处理。具有context、frameState、inversPixelTransform等属性,扩展了precompose、postcompose、postrender等事件类型。

RenderEvent(ol.RenderEvent)

属性

描述

context{CanvasRenderingContext2d、WebGLRenderingContext、undefined}

canvas画布上下文对象。当事件由地图(map)触发时不可用,对于Canvas 2D图层,context将是2D渲染上下文;对于WebGL图层,context将是WebGL上下文

frameState{FrameState}

当前渲染帧状态

inversPixelTransform

CSS像素(相对于地图视口的左上角)转换为此事件上下文中的渲染像素。仅在使用Canvas渲染器时可用,否则为null

target{Object}

事件目标

type{String}

事件类型

方法

描述

preventDefault

阻止默认事件

stopPropagation

阻止事件冒泡传递

事件

描述

precompose

在组成图层之前触发。当由map触发时,事件对象将不包含context;当由图层触发时,事件对象包含context;目前只有WebGL图层分派此事件。

precompose

在组成图层之后触发。当由map触发时,事件对象将不包含context;当由图层触发时,事件对象包含context;目前只有WebGL图层分派此事件。

prerender

在图层渲染之前触发

postrender

在图层渲染之后触发

rendercomplete

在图层渲染完成时触发。即所有数据源和切片在当前视口都已完成加载,并且所有切片都已淡入淡出,此时事件对象不包含context

change

通用变更事件,当修改计数器增加时触发

error

通用错误事件,当错误发生时触发

`**layer**`**触发包含**`**context**`
TDTImgLayer.on("prerender"function (event) {
    console.log("prerenderEventObject:", event)
})
TDTImgLayer.on("postrender"function (event) {
    console.log("postrenderEventObject:", event)
})


**map**触发不含**context**

map.on("precompose"function (event) {
    console.log("precomposeEventObject:", event)
})
map.on("postcompose"function (event) {
    console.log("postcomposeEventObject:", event)
})
map.on("rendercomplete"function (event) {
    console.log("rendercompleteEventObject:", event)
})

4. 数据源事件

4.1. VectorSourceEvent

VectorSourceEvent具有featurefeatures等属性,包含addfeature、changefeature、clear、featureloadstart等事件类型。

VectorSourceEvent(ol.VectorSourceEvent)

属性

描述

feature{FeatureClass}

ADDFEATURE and REMOVEFEATURE事件添加或移除要素时才存在,否则为undefined

features{Array<FeatureClass>}

FEATURESLOADED事件加载要素时才存在,否则为undefined

target{Object}

事件目标

type{String}

事件类型

方法

描述

preventDefault

阻止默认事件

stopPropagation

阻止事件冒泡传递

事件

描述

addfeature

当要素添加到数据源时触发

removefeature

当要素从数据源移除时触发

changefeature

当要素更新时触发

featuresloadstart

当要素开始加载时触发

featuresloadend

当要素加载结束时触发

featuresloaderror

当要素加载出错时触发

clear

当数据源调用此方法时触发

change

通用变更事件,当修改计数器增加时触发

error

通用错误事件,当错误发生时触发

4.2. TileSourceEvent

TileSourceEvent扩展了tile属性,包含tileloadstart、tileloadend、tileloaderror等事件类型。

TileSourceEvent(ol.TileSourceEvent)

属性

描述

tile{Tile}

与事件相关的且切片

target{Object}

事件目标

type{String}

事件类型

方法

描述

preventDefault

阻止默认事件

stopPropagation

阻止事件冒泡传递

事件

描述

tileloadstart

当切片开始加载时触发

tileloadend

当切片加载结束时触发

tileloaderror

当切片加载出错时触发

change

通用变更事件,当修改计数器增加时触发

error

通用错误事件,当错误发生时触发

4.3. RasterSourceEvent

RasterSourceEvent扩展了data、extent等属性,包含beforeoperations、afteroperations等事件类型。

RasterSourceEvent(ol.RasterSourceEvent)

属性

描述

data{Object}

可用于所有操作的对象,还可用来做存储对象

extent{Extent}

栅格图层范围

resolution{Number}

分辨率(每像素地图单位)

target{Object}

事件目标

type{String}

事件类型

方法

描述

preventDefault

阻止默认事件

stopPropagation

阻止事件冒泡传递

事件

描述

beforeoperations

在运行操作之前触发。监听器将收到一个具有数据属性的事件对象,该属性可用于使数据可用于操作。

afteroperations

在操作运行后触发。监听器将收到一个具有数据属性的事件对象。如果使用多线程,数据将是一个对象数组。如果使用单线程,数据将是单个对象。

change

通用变更事件,当修改计数器增加时触发

error

通用错误事件,当错误发生时触发

4.4. ImageSourceEvent

ImageSourceEvent扩展了image等属性,包含imageloadstart、imageloadend、imageloaderror等事件类型。

ImageSourceEvent(ol.ImageSourceEvent)

属性

描述

image{ImageWrapper}

影像相关事件

target{Object}

事件目标

type{String}

事件类型

方法

描述

preventDefault

阻止默认事件

stopPropagation

阻止事件冒泡传递

事件

描述

imageloadstart

当影像开始加载时触发

imageloadend

当影像加载结束时触发

imageloaderror

当影像加载出错时触发

change

通用变更事件,当修改计数器增加时触发

error

通用错误事件,当错误发生时触发

OpenLayers示例数据下载,请在公众号后台回复:ol数据

全国信息化工程师-GIS 应用水平考试资料,请在公众号后台回复:GIS考试

GIS之路公众号已经接入了智能助手,欢迎大家前来提问。

欢迎访问我的博客网站-长谈GIShttp://shanhaitalk.com

都看到这了,不要忘记点赞、收藏+关注 

本号不定时更新有关 GIS开发  相关内容,欢迎关注 

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部