> **本文回答**：右键菜单 / 绘图 / 测量 / 选择 / 控件 / 键鼠输入 —— vjmap 的交互能力总览。

# 交互总览

## 分类

| 类别 | 目的 | 子文件 |
|---|---|---|
| **右键菜单** | 地图 / 图层 / Marker 右键弹菜单 | [context-menu](context-menu.md) |
| **测量工具** | 距离 / 面积 / 角度 / 坐标 | [measure](measure.md) |
| **绘图工具** | 点 / 线 / 面 / 圆 / 矩形，含夹点编辑 | [draw-tools](draw-tools.md) / [draw-action](draw-action.md) |
| **选择工具** | 框选 / 点选 / 多边形选 | [select-feature](select-feature.md) |
| **地图控件** | Navigation / Scale / MiniMap 等 | [controls](controls.md) |
| **鼠标键盘事件** | mouseover / click / keydown | [mouse-keyboard](mouse-keyboard.md) |
| **拖拽 / 旋转 / 缩放控制** | 启用禁用交互 | [drag-rotate-zoom](drag-rotate-zoom.md) |
| **捕捉 / 正交 / 快捷键** | 绘制辅助 | [snap-ortho](snap-ortho.md) |

## 两套绘图 API

`vjmap.Draw` 既有 **全局控件模式** 又有 **一次性 action 模式**：

- **`new vjmap.Draw.Tool({...})`** + `map.addControl(draw)`：显示工具栏，点按钮切换模式。
- **`await vjmap.Draw.actionDrawLineSting(map, {...})`**：Promise 风格，无按钮，业务代码里直接等用户画完一条线 → 继续下一步。

测量、选择、修改文字等业务场景都用 **action 模式**，因为它天然是"绘制一次 → 得到结果 → 继续下一步"的流程。

## 控件位置

`map.addControl(control, position)`：`position` = `top-left | top-right | bottom-left | bottom-right`。

## 主题级 Top 3 陷阱

1. **Marker 的右键不走 map.setMenu**：Marker 是独立 DOM，需要 `marker.getElement().addEventListener("mousedown", ...)`。
2. **内存模式选择能力受限**：`MapOpenWay.Memory` 下 `pointQueryFeature`/`rectQueryFeature`/`exprQueryFeature` 可用（点查询恒只返回 1 条，返回几何是实体外包范围而非真实轮廓），但 `conditionQueryFeature`（SQL 条件）返回 `{error:"not support query type!"}`；需要真实几何或 SQL 选择请用 `MapOpenWay.GeomRender` 打开。
3. **绘制时"Alt 取消捕捉 / Ctrl 正交 / Backspace 删点"** 都是内置快捷键；触摸端不可用。
