> **本文回答**：打开图主题的总览与所有子项索引；3 种打开方式的选型速查。

# 打开图总览

## 选型速查

| 场景 | 用哪种 | 文档 |
|---|---|---|
| 打开已上传 DWG 图进行查看/叠加 | `svc.openMap({ mapid, mapopenway: GeomRender })` | [open-dwg](open-dwg.md) |
| 第一次把 dwg 文件挂到服务端并取 mapid | 传 `fileid` 或 `filedoc` | [open-dwg](open-dwg.md) |
| 临时查看（只用内存，不保存至空间库） | `mapopenway: Memory` | [map-open-way](map-open-way.md) |
| 新建一张空白图（程序化绘制） | `svc.rasterBlankStyle(0, 24)` + 自己定坐标范围 | [blank-map](blank-map.md) |
| 从前端数据生成一张 DWG | `svc.updateMap({ filedoc })` | [blank-map](blank-map.md) + [backend/upload-create-map](../backend/upload-create-map.md) |
| 切换成另一张图但保留 map 对象 | `map.switchMap({ mapid })` | [switching](switching.md) |
| 切换成另一张图并重建 map | 先 `map.destory()`，再 `new vjmap.Map(...)` | [switching](switching.md) |

## 子项索引

| 子文件 | 回答什么 |
|---|---|
| [open-dwg](open-dwg.md) | `svc.openMap` 完整参数、fileid 的 4 种形态、`res.error` 处理 |
| [map-open-way](map-open-way.md) | `vjmap.MapOpenWay.Memory` / `GeomRender` 的差异、优劣、选型 |
| [blank-map](blank-map.md) | 空白地图、`rasterBlankStyle` / 自定义 style |
| [bounds-and-projection](bounds-and-projection.md) | `res.bounds` → `GeoBounds` → `GeoProjection` 的链路 |
| [switching](switching.md) | 三种切图方式：switchMap / 重建 / 新 div |

## 主题级 Top 3 陷阱

1. **`res.error` 没检查就 new GeoProjection** → 后续操作全部失败，错误难溯源。
2. **`res.bounds` 是字符串**，直接传 `new GeoProjection(res.bounds)` 是 OK 的（内部会 parse），但你若先 `vjmap.GeoBounds.fromString` 则要保证值不是 `undefined`。
3. **切图后忘了 `map.fitMapBounds()`** → 视图留在旧图的中心点。
