交互系统
目的和范围
交互系统为在 OpenLayers 中处理用户输入和启用交互式地图操作提供了全面的框架。该系统管理鼠标、触摸和键盘事件以支持地图导航、要素创建、编辑和选择操作。它通过模块化、可扩展的架构将原始浏览器事件转换为有意义的地图交互。
关于渲染交互和视觉反馈的信息,请参阅 渲染系统。关于 UI 控件和窗口部件,请参阅 控件系统。
系统架构
交互系统围绕具有事件驱动通信模式的分层类结构构建:
事件处理框架
该系统通过结构化管线处理原始浏览器事件,该管线规范化输入并应用条件逻辑:
事件条件函数
该系统提供了一整套条件函数用于事件过滤和行为修改:
| 条件函数 | 用途 | 使用示例 |
|---|---|---|
| noModifierKeys | 未按下修饰键 | 默认绘图条件 |
| primaryAction | 主按钮/触摸操作 | 要素修改 |
| altKeyOnly | 仅 Alt 键 | 顶点删除 |
| shiftKeyOnly | 仅 Shift 键 | 自由绘图模式 |
| singleClick | 单击事件 | 要素选择 |
| always | 始终为真 | 无条件交互 |
| never | 始终为假 | 禁用的交互 |
要素编辑工作流程
要素编辑交互遵循协调的工作流程,该工作流程集成了绘图、修改、选择和吸附:
指针交互基类
PointerInteraction 类为大多数用户输入处理提供基础,管理拖动序列和多触摸场景:
关键方法和属性
| 方法/属性 | 用途 | 实现 |
|---|---|---|
| handleDownEvent() | 启动交互序列 | 返回布尔值以开始拖动 |
| handleDragEvent() | 处理拖动移动 | 在活动拖动期间调用 |
| handleUpEvent() | 完成交互序列 | 返回布尔值以继续 |
| handlingDownUpSequence | 跟踪拖动状态 | 活动拖动的布尔标志 |
| targetPointers | 多触摸指针跟踪 | 活动指针事件的数组 |
| getPointerCount() | 活动指针计数 | 用于多点触控检测 |
绘图交互详情
Draw 交互支持多种几何类型,具有复杂的坐标管理:
几何类型支持
跟踪要素集成
Draw 交互包括高级跟踪功能,用于跟随现有几何图形:
吸附系统架构
Snap 交互为精确要素对齐提供智能坐标调整:
空间索引和目标检测
与地图和图层系统的集成
交互系统与其他 OpenLayers 组件无缝集成:
矢量图层集成
| 集成点 | 用途 | 实现 |
|---|---|---|
| 要素创建 | 将新要素添加到源 | Draw → VectorSource.addFeature() |
| 要素修改 | 更新现有几何图形 | Modify → 直接几何图形更新 |
| 要素选择 | 视觉高亮 | Select → 样式覆盖 |
| 命中检测 | 识别目标要素 | Map 像素查询 |
叠加层系统集成
| 交互 | 叠加层用途 | 用途 |
|---|---|---|
| Draw | 草图叠加层 | 实时绘图预览 |
| Modify | 顶点叠加层 | 修改手柄显示 |
| Snap | 无叠加层 | 直接坐标修改 |
| Select | 样式更改 | 选择高亮 |
事件生命周期和状态管理
交互通过事件驱动的生命周期维护复杂状态: