> ## Content Index
> Fetch the complete content index at: https://yinguobing.com/blog/llms.txt
> Use this file to discover other available public pages before exploring further.

# 两步路KMZ轨迹编辑器
- URL: https://yinguobing.com/blog/kmz-track-editor/
- Published: 2026-05-22T06:55:37.000Z
- Updated: 2026-05-22T07:00:02.000Z
- Description: 徒步后轨迹里多了走错路和拍照留下的冗余线段。两步路没有编辑功能，Google Earth不支持带时间戳的轨迹，手改 XML 又太折腾。花三天vibe coding了一个 KMZ轨迹编辑器。
- Author: 尹国冰
- Tags: 生活故事

五一假期徒步，使用两步路记录了完整的徒步轨迹。但是在共享轨迹之前，我发现轨迹中存在大量多余的无用路径，可能是当时停下来拍照，或者探索路线时产生的。我想删去这些无用轨迹，但是两步路手机版没有这个功能。

我尝试使用Google Earth来修改轨迹，但是Google Earth不支持含有时间戳标记的轨迹编辑。我想试一下手动编辑。KMZ轨迹文件本质上是个压缩包，里面包着KML标注语言文件、图片和视频。但是两步路导出的轨迹尤其复杂——多段轨迹、标注点、沿途拍的媒体文件全都混在一起。解压、手改XML、再打包，每一步都是劝退。

感谢AI，我花了三天时间vibe coding了一个轨迹编辑器。

### 核心编辑流程

一次编辑只需要三步：

1. **拖入文件** — 把两步路导出的 `.kmz` 拖进浏览器窗口，解析自动完成。轨迹线、标注点（waypoint）、里程数据一目了然。
2. **点选删除** — 在地图上依次点击两个轨迹点，选中的路段会高亮。确认删除后该段变灰，里程和点数的统计立刻重新计算。
3. **导出结果** — 点击导出，工具自动重建 KMZ 文件。删除的路段消失，标注点保留，沿途的媒体文件原封不动打包进去。

整个过程的底层逻辑不简单——KML 里的 `<gx:Track>` 可能是交替排列的 `<when><coord>`，也可能按块排列；删除时需要把全局点索引映射到各段的局部索引；导出的 KMZ 还得重新压缩并包含所有附件。但这些对用户完全透明。

### 不仅仅是删除工具

除了最核心的轨迹段删除，工具还覆盖了一些常用功能需求：

- **标注点编辑**：点击标注点标记可以重命名或删除，删除记录自动同步到本地存储。
- **轨迹重命名**：点击名称直接进入编辑模式，支持中文文件名。
- **地图切换**：卫星影像（Esri）和标准地图（OpenStreetMap）一键切换，配色自动跟随。
- **撤销与清空**：每段删除记录都在右侧面板列出，可单独撤销或一键清空所有修改。
- **数据持久化**：所有删除记录和标注点编辑都保存在浏览器 localStorage 里，刷新页面不会丢失进度。
- **轨迹描述查看**：两步路添加的路线介绍可以在弹窗中查看，不用切回手机。

### 设计原则

我并不精通WEB开发，因此设计部分完全是由AI来搞定的。没有多余依赖。前端用的是原生JavaScript + Leaflet，Leaflet库连同地图图层直接vendored在`static/lib/`目录里。后端只依赖 Flask，没有数据库，没有队列，没有容器编排。整个项目跑起来就是 `python3 -m kmz_editor.server` 一行命令。

主题配色做了专门的打磨——深色山野风，珊瑚色点缀，配合Esri卫星图的自发光青绿轨迹线。我觉得用起来蛮顺手的。

### 为什么做这个

我平时用两步路记录徒步轨迹，但每次遇到走错路需要回头的时候，导出后的轨迹就多了一条多余的折返线段，删不掉。市面上不缺轨迹编辑器，但为了删几段路去学一个专业软件，总觉得太沉重。

所以就有了这个：只做一件事，把这件事做好。不装框架，不搞微服务。打开、拖文件、点两下、导出，就这么简单。

AI时代，每个人都可以制作出属于自己的定制化软件。

代码开放：

[GitHub - yinguobing/kmz-track-editor: 两步路轨迹编辑器两步路轨迹编辑器. Contribute to yinguobing/kmz-track-editor development by creating an account on GitHub.![](https://yinguobing.com/blog/content/images/icon/pinned-octocat-093da3e6fa40-e2c39927d004078983910c9017066f4257a1d80a7e2456753d1285938dd858e7.svg)GitHubyinguobing![](https://yinguobing.com/blog/content/images/thumbnail/e3ac6b5a-7775-4a71-ba18-e7d48d55e061-63163539e50670aaf4ba2b0a7ea8d3f0da9c3628bddc1d84bea1a4becc2ca1c2)](https://github.com/yinguobing/kmz-track-editor?ref=yinguobing.com)

容器化部署：

```bash
docker run -d -p 8899:8899 yinguobing/kmz_editor:0.1.0
```

部署后访问：[http://localhost:8899](http://localhost:8899/?ref=yinguobing.com)