Skip to content

交互系统

目的和范围

交互系统为在 OpenLayers 中处理用户输入和启用交互式地图操作提供了全面的框架。该系统管理鼠标、触摸和键盘事件以支持地图导航、要素创建、编辑和选择操作。它通过模块化、可扩展的架构将原始浏览器事件转换为有意义的地图交互。

关于渲染交互和视觉反馈的信息,请参阅 渲染系统。关于 UI 控件和窗口部件,请参阅 控件系统

系统架构

交互系统围绕具有事件驱动通信模式的分层类结构构建:

SVG
100%

事件处理框架

该系统通过结构化管线处理原始浏览器事件,该管线规范化输入并应用条件逻辑:

SVG
100%

事件条件函数

该系统提供了一整套条件函数用于事件过滤和行为修改:

条件函数用途使用示例
noModifierKeys未按下修饰键默认绘图条件
primaryAction主按钮/触摸操作要素修改
altKeyOnly仅 Alt 键顶点删除
shiftKeyOnly仅 Shift 键自由绘图模式
singleClick单击事件要素选择
always始终为真无条件交互
never始终为假禁用的交互

要素编辑工作流程

要素编辑交互遵循协调的工作流程,该工作流程集成了绘图、修改、选择和吸附:

SVG
100%

指针交互基类

PointerInteraction 类为大多数用户输入处理提供基础,管理拖动序列和多触摸场景:

关键方法和属性

方法/属性用途实现
handleDownEvent()启动交互序列返回布尔值以开始拖动
handleDragEvent()处理拖动移动在活动拖动期间调用
handleUpEvent()完成交互序列返回布尔值以继续
handlingDownUpSequence跟踪拖动状态活动拖动的布尔标志
targetPointers多触摸指针跟踪活动指针事件的数组
getPointerCount()活动指针计数用于多点触控检测

绘图交互详情

Draw 交互支持多种几何类型,具有复杂的坐标管理:

几何类型支持

SVG
100%

跟踪要素集成

Draw 交互包括高级跟踪功能,用于跟随现有几何图形:

SVG
100%

吸附系统架构

Snap 交互为精确要素对齐提供智能坐标调整:

空间索引和目标检测

SVG
100%

与地图和图层系统的集成

交互系统与其他 OpenLayers 组件无缝集成:

矢量图层集成

集成点用途实现
要素创建将新要素添加到源Draw → VectorSource.addFeature()
要素修改更新现有几何图形Modify → 直接几何图形更新
要素选择视觉高亮Select → 样式覆盖
命中检测识别目标要素Map 像素查询

叠加层系统集成

交互叠加层用途用途
Draw草图叠加层实时绘图预览
Modify顶点叠加层修改手柄显示
Snap无叠加层直接坐标修改
Select样式更改选择高亮

事件生命周期和状态管理

交互通过事件驱动的生命周期维护复杂状态:

交互状态转换

SVG
100%