一个功能强大的离线网页应用,用于记录、管理、可视化和分析您的火车和飞机出行历史。
- 新增足迹页:加入独立的 footprint.html,可单独录入和点亮去过的城市、国家和地区
- 管理页点亮能力重构:
- 火车页和飞机页分开点亮
- 按每条记录的真实出发/到达地点判断,不再混用两类记录
- 中国按城市边界点亮,国外按国家边界点亮
- 足迹页交互增强:
- 城市与国家分组展示
- 中国城市 / 中国省份 / 国家(地区)三组统计
- 当前选中项显示在统计区,点击地图空白可取消
- 城市与国家重叠时,城市优先响应
- 国家识别稳定性提升:
- 足迹页国家识别优先使用本地世界国家数据集
- 支持中文名、英文名和 ISO 代码匹配
- 降低在线检索失败或限流对点亮结果的影响
- 重庆边界修复:
- 管理页与足迹页都对重庆做了特殊边界合并
- 统一合并
500000 / 500100 / 500200
- 本地缓存优化:
- 足迹页和管理页都支持浏览器缓存
- 刷新后可恢复已录入足迹和已解析地点
- 对关键解析逻辑变更提供缓存迁移
演示地址:https://doubleking-1.github.io/train-flight-records-manager/
- 在线演示版本需要您自行配置 API Keys 才能使用完整功能
- 🆕 v9.0.0 新增:现在支持 OpenStreetMap (CartoDB) 地图,无需 API 密钥即可在线演示查看地图!
- 高德地图和 Google Maps 仍需要相应的 API 密钥
- AI 功能需要配置 Gemini 或第三方 AI 的 API 密钥
- 推荐下载到本地使用以获得最佳体验
💡 快速体验:
- 可直接选择 OpenStreetMap 地图查看路线(无需任何配置)
- 可以查看应用界面 and 设计
- 导入本地数据文件进行测试
- 完整功能配置请参考下方快速开始部分
- 火车模式 🚆:管理火车票记录(车次、铁路局、车型号等)
- 飞机模式
✈️ :管理机票记录(航班号、航空公司、机型等) - 数据完全独立存储,模式切换不丢失
- 多地图支持:
- 🇨🇳 高德地图(Amap)
- 🌍 Google Maps
- 🆕 OpenStreetMap (CartoDB) - 无需 API 密钥,开箱即用
- 首页与管理页面地图选择自动同步
- 主题切换:支持暗色/浅色模式,地图样式自动适配计算起终点坐标并绘制弧线
- 路径缓存:避免重复地理编码请求,提升性能
- 路径重绘:支持强制重新生成路径,产生不同曲线外观
- 点亮城市/国家:
- 管理页支持在地图上点亮已去过地点
- 火车页与飞机页分开统计,按当前模式分别点亮
- 按每条记录的实际出发/到达坐标、城市或国家判断
- 中国按城市边界点亮,国外按国家边界点亮
- 重庆等特殊直辖市已做边界合并处理
- 路径交互增强:
- 右键菜单:直接在地图线路上右键点击以查看详情或重新画线
- 详情弹窗:精美的详情展示,包含自动计算的均速和格式化时长
- 年份图例:右下角交互图例,可选择性显示/隐藏特定年份的路线
- 独立足迹页:新增
footprint.html,用于单独记录和展示去过的城市、国家或地区 - 输入即点亮:支持换行、中文逗号、英文逗号批量录入
- 城市/国家分开展示:侧边栏将城市与国家(地区)分组显示,支持点击定位和删除
- 统计卡片:
- 中国城市:已去过城市数 / 全部城市数
- 中国省份:已覆盖省级行政区数 / 全部省级行政区数
- 国家(地区):已覆盖国家(地区)数 / 全球国家(地区)数
- 交互优化:
- 当前选中项显示在统计区域
- 地图空白处点击可清除当前选中
- 城市与国家重叠时,城市优先响应
- 本地缓存:
- 已录入足迹保存在浏览器
- 地点解析结果会缓存,刷新后可继续显示
- 国家识别优先使用本地国家数据集,降低在线检索失败影响
- 混合回放:支持 🚆 火车(红色) /
✈️ 飞机(蓝色) / 🌍 全部混合 - 多种模式:
- 全部年份一次性回放
- 逐年顺序播放
- 指定单个年份回放
- 实时里程:动画过程中显示累计里程数
- 行内编辑:直接在表格中编辑、插入、删除记录
- 多列排序:点击表头排序(日期、时间、车次/航班号、站点、城市、费用、里程等)
- 自动计算:
- 速度 (km/h):根据里程和时长自动计算
- 单价 (RMB/km):根据费用和里程自动计算
- 两个字段均为只读,实时更新
- 导入/导出:
- CSV 导入:强大容错,自动识别"出发站"/"起点"等多种表头别名
- Excel 导入:支持
.xlsx格式 - CSV/JSON 导出:包含完整数据和计算字段,表头自动适配中英文
- 备份/恢复:一键创建完整快照(
.json),包含记录、设置、路径缓存 - 云端同步 ☁️:通过 JSONBin 实现多设备数据同步
- 智能问答 ✨:向 AI 提问您的行程细节
- 示例:"我去过哪些城市?"、"最远的一次旅行是哪里?"、"2024年花费最多的是哪次?"
- 自动读取所有记录作为上下文
- 灵活配置 ⚙️:支持多种 AI 提供商
- 第三方 API(OpenAI 兼容)
- Gemini 官方 API
- API Key 仅本地存储,隐私安全
- 年度报告:自动生成年度足迹报告,支持保存为图片
- 实时统计面板:
- 总次数、总里程、总花费、总时长
- 最远路线、最长时长、最高花费
- 平均速度、平均单价
- 多维图表:
- 年度/月度次数、里程、费用、时长柱状图
- 铁路局/航空公司统计(未知值红色高亮)
- 车型/机型分布统计
- 路线热力图和城市访问排名
- 交互式统计:点击汇总卡片自动高亮并滚动到对应表格行
- 暗色模式:全站适配深色主题
- 响应式设计:适配不同屏幕尺寸
- 功能说明:内置详细功能帮助文档
dev/
├── index.html # 主页 - 展示所有记录的地图概览和汇总统计
├── app.html # 管理页 - 完整的数据编辑 and 分析界面
├── footprint.html # 足迹页 - 单独记录并点亮去过的城市/国家
├── js/
├── pages/ # 📄 页面脚本层
│ │ ├── app.js # 管理页核心逻辑
│ │ ├── footprint.js# 足迹页核心逻辑
│ │ └── index.js # 主页逻辑
│ ├── modules/ # 🔧 功能模块层
│ │ ├── replay.js # 动画回放模块
│ │ ├── visited_paint.js # 管理页点亮城市/国家模块
│ │ └── statistics.js # 统计功能模块
│ ├── services/ # 📡 服务层
│ │ └── cloud_sync.js # 云端同步功能
│ ├── utils/ # 🛠️ 工具层
│ │ └── helpers.js # 工具函数(坐标转换、时长格式化)
│ ├── config.js # ⚙️ API 配置(地图、AI 等)
│ └── features_help.js# ❓ 功能说明共享模块
├── css/
│ ├── index.css # 主页样式
│ └── app.css # 管理页样式
├── CHANGELOG.md # 版本更新日志
└── README.md # 项目说明文档
git clone https://github.com/你的用户名/train-flight-records-manager.git
cd train-flight-records-managercp js/config.example.js js/config.js打开 js/config.js,根据需要配置以下 API Keys:
高德地图(推荐国内用户)
- 访问 高德开放平台
- 注册账号并创建"Web端(JS API)"应用
- 获取两个密钥:
- Key:应用的 Key
- 安全密钥:在应用设置中的 "Web服务" 安全密钥
- 在
js/config.js中填入:window._AMapSecurityConfig = { securityJsCode: '你的安全密钥', }; amap: { key: '你的高德地图Key', // ... }
Google Maps(推荐国外用户)
- 访问 Google Cloud Console
- 创建项目并启用 "Maps JavaScript API"
- 创建 API 凭据(API Key)
- 在
js/config.js中填入:google: { key: '你的Google Maps Key', // ... }
选项 1:Gemini 官方
- 访问 Google AI Studio
- 创建 API Key
- 在应用界面的"AI 配置"中选择 "Gemini 官方"并填入 Key
选项 2:第三方 OpenAI 兼容 API
- 根据您的服务提供商(如 ChatAnywhere)获取 API Key
- 在应用界面的"AI 配置"中选择 "第三方 AI"并填入配置
- 访问 JSONBin.io
- 注册并获取 Master Key
- 在应用界面的"云端同步配置"中填入
直接在浏览器中打开文件:
- 主页概览:
index.html - 数据管理:
app.html - 足迹页:
footprint.html
或使用本地服务器(推荐):
# 使用 Python
python -m http.server 8000
# 使用 Node.js
npx serve
# 使用 VS Code Live Server 插件
# 在 VS Code 中右键点击 HTML 文件 -> "Open with Live Server"然后访问 http://localhost:8000
- 打开
app.html - 选择模式(🚆 火车 或
✈️ 飞机) - 点击 "➕ 新增" 添加第一条记录
- 填写出行信息并保存
- 点击 "导入" 按钮
- 选择 CSV 或 Excel 文件
- 系统会自动识别表头并导入数据
- 添加记录后,地图会自动显示路线
- 切换到 "统计" 标签查看图表
- 在管理页右上角可开启
点亮城市 - 打开
footprint.html可维护独立足迹地图 - 使用 "动画回放" 功能查看行程动画
包含以下配置:
- 高德地图 API Key 和版本
- Google Maps API Key 和配置
- AI 服务端点和模型
- 第三方库 CDN(Chart.js、XLSX.js、Marked.js)
应用使用 localStorage 存储:
trainRecords:火车票记录planeRecords:机票记录geocodeCache:地理编码缓存- 用户设置和偏好
- 快速修改记录:双击表格行进入编辑模式
- 路径调整:如果路线显示不理想,使用"🔄 重新画线"功能
- 年份筛选:在统计面板选择特定年份,表格和地图会自动过滤
- 导出数据:定期备份数据,导出 JSON 文件保存完整信息
- AI 问答:使用自然语言提问,AI 会分析所有记录给出答案
- ✅ 完全离线:所有数据存储在本地浏览器
- ✅ 无服务器:不依赖后端服务器
- ✅ API Key 本地化:所有 API 密钥仅存储在本地
- ✅ 云同步可选:是否使用云端同步完全由您决定
- ⚡ 表单交互逻辑优化 - 新增记录现在默认插入到表格首行,优化录入体验
- 🔍 多字段高级筛选 - 在管理页面新增年份、车次、型号、起终点站、起终点城市等多维度动态筛选功能
- 📊 选中行数据统计 - 引入“多选统计”模式,可勾选多行记录实时汇总计算总里程、总花费与总时长
- 🛡️ 安全审计与配置分流 - 完善
.gitignore与 API 配置逻辑,新增config.example.js模板,支持本地私密配置与 GitHub 示例分流 - 🤖 AI 问答修复 - 修复了 Gemini/三方 AI 在特定配置下请求地址失效的 Bug
- ✨ 全局统一 ESC 关闭 - 全站所有弹窗、遮罩层、菜单均支持 ESC 键一键关闭
- ✨ 线条交互升级 - 地图 Polyline 线路新增右键菜单,支持“查看详情”与“重新画线”
- ✨ 行程详情 Modal - 精心设计的详情弹窗,自动计算均速,格式化显示时长
- ✨ Bug 修复 - 彻底解决重新画线时的“双重影”重叠问题
详见 CHANGELOG.md
本项目完全借助 AI 辅助编写,代码、文档、功能设计均通过人机协作完成。这是一次有趣的探索,展示了 AI 在软件开发中的潜力。
项目仍在持续优化中,如有任何问题或建议,欢迎提出 Issue 或 PR。还请多多指教!🙏
本项目采用 MIT 协议开源。详见 LICENSE 文件。
感谢以下开源项目和服务:



