Skip to content

Repository files navigation

GPX Studio

基于 PyQt5 的开源 GPX 路线规划工具,支持多交通方式、智能缩放、实时预览。

核心功能

  • 路线规划:步行/骑行/驾车多交通方式,多条路线方案对比,途径点管理,实时距离/时间/海拔显示
  • 地图定位:高德地图/OSM双地图源,智能缩放,地点搜索,Windows原生定位
  • 收藏点:右键/搜索收藏地点,地图星标显示,点击查看详情,支持删除与显示开关(双地图源通用)
  • 地图右键菜单:右键点击地图任意位置,快速设置起点/途径点/终点,显示位置详细信息
  • GPX导出:兼容主流GPS设备,智能时间计算,时区检测
  • 数据管理:统一数据目录,配置/日志/缓存分类存储,支持开发和打包环境
  • 技术特性:异步处理,启动优化,模块化设计,ESC快捷键支持

快速开始

# 1. 克隆项目
git clone https://github.com/PingWangWang/gpx-studio.git
cd gpx-studio

# 2. 创建并激活虚拟环境(推荐)
python -m venv .venv

# Windows CMD 激活虚拟环境
.venv\Scripts\activate

# Windows PowerShell 激活虚拟环境
# .venv\Scripts\Activate.ps1

# Linux/macOS 激活虚拟环境
# source .venv/bin/activate

# 3. 安装依赖
pip install -r requirements.txt
# 清华镜像
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
# 阿里镜像
pip install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/

# 4. 运行程序
python main.py

# 退出虚拟环境
deactivate

# 删除虚拟环境(如需重新创建)
# Windows CMD
rmdir /s /q .venv
# Windows PowerShell
# Remove-Item -Recurse -Force .venv
# Linux/macOS
# rm -rf .venv

配置地图

首次使用需配置高德地图 API Key:

  1. 访问 高德开放平台 申请密钥
  2. 应用内:工具 → 地图配置 → 输入 API Key

项目结构

GPXStudio/
├── main.py                 # 程序入口
├── version.py              # 版本号
├── requirements.txt        # 依赖清单
├── scripts/                # 维护脚本
│   ├── clean.py            # 项目清理
│   └── run_gpx_tests.py    # 运行测试
├── build/                  # 打包脚本
├── res/                    # 资源文件(图标)
├── Dist/                   # 打包输出目录
│   └── GPXStudioData/      # 数据目录(开发环境)
│       ├── config/         # 配置文件
│       ├── logs/           # 日志文件
│       ├── cache/          # 缓存目录
│       │   ├── GaoDeMapData/  # 高德地图缓存
│       │   └── OSMMapData/    # OSM地图缓存
│       ├── GeoInfoList.json   # 地理信息列表
│       ├── RouteHistoryList.json  # 路线历史
│       └── FavoritesList.json # 收藏点列表
└── src/                    # 源代码
    ├── app/                # 主应用
    │   ├── data_paths.py   # 数据路径管理
    │   └── managers/       # 管理器模块
    ├── core/               # 核心功能(异步、信号、DI)
    ├── modules/            # 功能模块(定位、GPX、地图、路线)
    ├── services/           # 服务层(高德、OSM、配置)
    ├── ui/                 # 界面组件
    │   └── popups/         # 弹出面板(设置、日志、关于)
    └── tests/              # 测试代码

注意:打包后的程序会在安装目录旁创建 GPXStudioData 文件夹存储所有数据。

开发指南

运行测试

# 运行所有GPX测试
python scripts/run_gpx_tests.py

# 运行特定测试
python -m unittest src.tests.unit.modules.gpx.test_gpx_export.TestGpxExportService.test_export_to_gpx

清理项目

python scripts/clean.py --all      # 清理所有
python scripts/clean.py --build    # 只清理构建文件
python scripts/clean.py --cache    # 只清理缓存

打包与安装包

# 生成 onedir 目录(启动更快,适合制作安装包)
python build/build_pyinstaller.py

# 生成安装包(Inno Setup)
# 1) 先运行上面的打包脚本
# 2) 使用 Inno Setup 编译 build/create_installer_script.iss

安装目录规则

  • 默认安装目录:C:\Program Files\GPX Studio\v{版本号}
  • 每次升级会创建新的版本目录(例如:v1.0.0v2.0.0
  • 如果目标目录已存在,安装器会提示用户选择处理方式

技术栈

  • Python 3.7+ | GUI: PyQt5 + PyQtWebEngine
  • 地图: folium + xyzservices | 路线: 高德API / OSM Nominatim
  • GPX: gpxpy | 定位: winrt (Windows原生)

版本历史

v2.1.16 (2026-08-10) - 路线管理功能与地图渲染性能优化

  • 🗺️ 路线管理:新增路线库(GPX 导入解析入库、按起终点去重),路线管理面板支持导入/导出/选择/渲染/海拔获取/删除;多路线同时渲染(8 色区分,独立开关控制)
  • 收藏联动:路线搜索历史条目收藏按钮与路线库双向联动,收藏状态持久化(重启后保持高亮)
  • ☑️ 列表交互统一:路线管理/收藏夹/历史列表统一 ☐/☑ 勾选 + 全选联动 + 按勾选批量删除/导出;面板跟随主窗口移动、失去焦点自动关闭
  • 🎯 渲染自动缩放:渲染/取消渲染路线后按当前渲染集合自动缩放(多路线按全部、单路线按单条);修复带海拔路线点缩放解包异常
  • 增量渲染优化:历史条目点击与路线管理渲染由全量重建改为 JS 增量注入(不重建页面,消除卡顿);库路线按 id 增量增删;新增规划路线专用图层
  • 🎨 起终点/途径点标记:渲染路线显示起(绿)/终(红)/途径点(蓝)小圆点,风格统一
  • 🚀 地图交互性能:修复 polyline 抽稀选项拼写(smoothFactor)导致滚轮缩放/平移卡顿的问题;补 noClip 与圆点非交互优化

v2.1.15 (2026-08-07) - 海拔剖面图交互与性能优化

  • 📊 海拔剖面图交互:详情面板上升/下降合并一行、移除路线名称、标题固定宽对齐美化;各条目新增悬停 tooltip(上升/下降格外说明为"全程逐段累计值,非起终点差值");折线图悬停时地图路线上实时显示定位圆点(跟随鼠标位置,离开消失)
  • 🧗 历史路线海拔按钮:路线搜索历史条目新增"获取海拔"按钮——无海拔直接获取;已获取则高亮显示,再次点击弹窗确认"是否重新获取(覆盖原数据)";获取结果持久化回写历史记录,重启后点击直接渲染不再重复请求
  • 海拔获取触发收敛:历史切换 / 路线规划 / 方案切换均不再自动获取海拔(仅手动触发);GPX 导出复用已有海拔(不重复请求),导出时新获取的海拔回写历史并同步按钮高亮
  • 🚀 折线图性能优化:按像素宽抽稀绘制(万级点绘制量 O(图宽)、视觉无损);悬停定位改二分查找(约 200 倍加速)+ 统计缓存;渲染时序调整为"先渲染路线、页面加载完成后再渲染折线图",期间加载指示器持续旋转
  • 🎨 主题适配修复:剖面图面板背景主题化(深色=深灰蓝 / 浅色=白),折线图区域不再透出浅色父容器背景;开关重开后历史路线直接显示折线图
  • 🗺️ 自动缩放优化:JS 侧先判断当前视图是否已包含全部元素——已适配则零开销跳过刷新,未适配才 fitBounds(含面积占比阈值,兼容 Leaflet 1.9.3 无 getArea)
  • 🛠️ 修复:历史路线海拔显示链路(route_alternatives 清空后 route_points 兜底)、自动缩放缩小后无法适配等

v2.1.14 (2026-08-07) - 地址标识体系重构与自动缩放精确适配

  • 🎯 地址标识体系重构:起点=绿色气泡三角形、终点=红色气泡正方形、历史/搜索点击=纯绿色气泡(无内部图形);所有渲染路径(点击预览 / 自动缩放 / 地图模式切换)样式一致,三种标识可明确区分
  • 🗺️ 自动缩放精确适配:改用 Leaflet fitBounds(含 80px padding)替代手算缩放级别,起终点/路线/位置标识/当前选中标识完整处于可视空间;范围计算统一坐标系(各元素按保存坐标系转 WGS-84),收藏点不参与缩放范围
  • 🧭 卫星路网默认关闭:高德/OSM 卫星模式路网标注默认不显示,路网开关与按钮状态一致;修复 folium 不序列化 overlay 导致的路网移除逻辑失效
  • 🔍 搜索结果交互优化:点击待选地址后列表保持打开(关闭按钮 / ESC 关闭);连续点击只显示当前选中标识(search_results 收敛 + 渲染层拒绝非选中残留);右键清除地图时同步清空搜索框
  • 🔘 工具栏按钮稳定:收藏夹/搜索结果弹出时保持"搜索 / 路线 / 关闭"3 按钮稳定(第 3 槽位二选一切换);路线规划面板与收藏夹面板互斥显示;加载指示器改为 emoji 轮换动画(样式与其他按钮统一)
  • 🛣️ 路线规划优化:重新设置起点 / 终点按面板会话边界清空旧标识(同一会话内设置互不清空)
  • 🖥️ UI 细节:搜索历史 / 搜索结果 / 收藏夹列表条目收藏按钮垂直居中;收藏夹列表地址名称按实际宽度自动换行
  • 🛠️ 修复:自动缩放后起点出视野 / 终点贴边、历史点击标识被渲染成起点样式、收藏点误参与缩放范围等

v2.1.13 (2026-08-06) - 主题切换设置(浅色/深色/跟随系统)与深色模式对比度修复

  • 🎨 主题切换设置:地图设置弹窗新增"主题"下拉框,支持浅色 / 深色 / 跟随系统三种模式,切换即时生效并持久化(map_config 新增 theme 配置项)
  • 🌓 跟随系统:新增 src/ui/system_theme.py 读取 Windows 系统浅/深色偏好(注册表 AppsUseLightTheme);"跟随系统"模式下系统切换主题时应用实时联动(主窗口监听 WM_SETTINGCHANGE
  • 🚀 启动即应用:应用启动时(界面创建前)按已保存主题渲染,避免浅色/深色切换闪烁
  • 👁️ 深色模式文字对比度修复:日志面板与任务日志的颜色按主题渲染(深色模式自动换浅色文字);工具栏搜索框"搜索地点"占位符与各输入框补充浅色文字/占位符颜色;下拉列表、日历控件补文字色;下拉箭头、列表选中态等随主题
  • 🛠️ 修复:深色模式下黑字深底不可读(日志 INFO 级别)、输入框占位符看不清、日历白底黑字方块等

v2.1.12 (2026-08-06) - 界面全面浅色化与主题切换框架

  • 🎨 界面全面浅色化:路线规划面板、确认/警告/失败对话框、设置面板、GPX导出/进度/更新/位置历史/位置信息/地图右键菜单、搜索历史/搜索结果/收藏列表等全部弹窗与面板由深色改为浅色(含日志、任务进度、比例尺、日期时间等嵌入面板与地图浮动按钮)
  • 🧩 主题切换框架预留:新增 src/ui/theme.py 主题系统——light/dark 两套颜色表 + QSS 占位符(__PANEL_BG__/__TEXT__ 等)统一管理全部面板颜色;切主题时已注册控件自动重渲染(theme.set_theme('dark'/'light') 入口已可用,切换 UI 待后续版本在设置面板提供)
  • 👁️ 输入框对比度优化:浅色模式下输入框背景由纯白改为浅灰(#f5f5f5)、边框加深(#cfcfcf),解决输入框与白色面板融为一体、边界不明显的问题
  • 🛠️ 修复:地图工具栏按钮样式失效(QSS 花括号转义残留)、路线方案取消选中后切换主题误刷回选中背景、关于面板 HTML 固定深色不随主题
  • 🗂️ 接入范围:28 个 UI 文件接入主题框架,颜色集中管理便于后续深/浅色一键切换

v2.1.11 (2026-08-06) - 工具栏按钮状态机与空历史体验优化

  • 🔘 工具栏按钮状态机统一:路线/收藏夹/关闭按钮显隐由"可见弹窗集合"统一计算(单一 _refresh_toolbar_buttons),修复搜索结果弹窗与收藏夹弹窗叠加时按钮互相覆盖的问题——收藏夹关闭后关闭按钮保留(待选列表可继续关闭)、路线按钮按状态正确恢复
  • 📭 空历史也弹列表:无任何搜索历史时,点击搜索框/路线面板输入框仍弹出历史列表(仅显示"我的位置"首行),不再隐藏
  • 🐛 修复:搜索结果弹窗显示时崩溃(收藏夹弹窗延迟创建未防护)、搜索结果选择后关闭按钮残留/路线按钮不恢复

v2.1.10 (2026-08-06) - 路线规划面板优化与"我的位置"入口

  • 🗺️ 路线规划面板顶部对齐:面板顶部与地点搜索列表一致(工具栏下方 4px),不再覆盖工具栏
  • 📐 面板高度自适应:面板高度随"路线搜索记录"条目数动态变化(条目少完整显示、超主窗口底部边界时固定高度 + 滚动条);窗口移动/缩放实时联动;清除路线后按历史记录数量还原高度
  • 📍 "我的位置"固定首行:搜索历史列表与路线面板最近搜索列表第一行固定"我的位置",点击定位到当前位置;路线面板场景自动将当前位置填入当前输入框(含坐标)
  • 📏 最近搜索列表高度自适应:弹窗高度受主窗口底部边界约束、随条目数动态变化、超限滚动条,随面板移动/缩放联动
  • 🔗 数据源统一:主窗口搜索历史列表与路线面板最近搜索列表共享同一存储实例
  • 🗑️ 移除清空按钮:最近搜索列表顶部"清空"按钮移除(不再提供该功能)
  • 🐛 修复:起点设"我的位置"后终点输入框弹窗立即消失(延迟隐藏误关新弹窗)、应用启动失败(SearchManager 参数错配)、列表首行与其余行左对齐不一致
  • ↩️ 回退:移除路线渲染时左侧让出面板宽度的缩放逻辑(按整个窗口大小缩放)

v2.1.9 (2026-08-06) - 收藏交互优化与搜索弹窗体验修复

  • 收藏按钮状态化:搜索历史/搜索结果列表的收藏按钮显示收藏状态(已收藏金色实心★/未收藏灰色空心☆),点击切换收藏与取消收藏,操作无弹窗提示,按钮即时变色、地图实时刷新
  • 📍 定位面板收藏:点击当前位置标识的详情面板新增"收藏位置"按钮(与"隐藏标识"并排,宽度一致),支持收藏/取消切换,同样无弹窗即时反馈
  • 🗺️ 弹窗跟随主窗口:搜索历史/结果下拉弹窗在拖动主窗口、缩放窗口时自动跟随并重算位置(与路线规划面板同构的锚点重算机制)
  • 📐 弹窗高度自适应:下拉弹窗最大高度以主窗口底部边界为限,条目少时随条目数变化,达上限时滚动条生效;窗口缩放实时联动
  • 🔧 文字遮挡修复:修复下拉列表条目文字上下被裁剪问题(item padding 与行控件内边距叠加)
  • 🐛 时序修复:修复弹窗收藏状态查询失效(map_manager 初始化时序晚于弹窗创建,改为运行时从父窗口实时获取)

v2.1.8 (2026-08-06) - 收藏点系统与定位标识交互增强

  • 收藏点系统:新增地图收藏点功能,双地图源通用(高德/OSM),数据本地 JSON 持久化(统一 WGS-84 坐标)
  • 📌 多入口收藏:右键菜单"收藏此位置"(自动逆地理编码取名称)、搜索结果与搜索历史列表 ☆ 快捷收藏
  • 🗺️ 星标渲染:收藏点以金色星形标记显示,点击弹出详情面板(名称/地址/坐标/收藏时间),支持删除
  • 🎛️ 显示开关:设置面板新增"显示收藏点"复选框,勾选状态带对勾图标反馈
  • 📍 定位标识面板:点击当前位置标识弹出面板,格式与收藏点面板统一(加粗标题+详情行),新增"隐藏标识"按钮
  • 🔍 自动缩放增强:自动缩放以显示所有元素时,将当前位置标识、收藏点纳入边界计算
  • 🔄 增量移除:删除收藏/隐藏定位标识通过 JS 增量移除标记,地图位置与缩放保持不动,不再跳回默认中心
  • ⚙️ 设置体验:设置保存成功直接关闭面板不再弹提示,配置错误时才弹错误并保持面板打开
  • 🐛 Bug修复:清空地图后定位标记复活、收藏点地址显示"未知"、自动缩放后定位标识消失、popup 特殊字符注入防护

v2.1.0 (2026-07-27) - 途径点上限于涨至16个,支持滚动查看

  • 🗺️ 途径点扩展:驾车途径点上限于涨至16个(原5个),对齐高德API能力
  • 🔄 滚动适配:途径点列表包裹QScrollArea,支持滚动查看,面板不溢出
  • 🔧 常量化管理:将硬编码5提取为MAX_WAYPOINTS常量,集中管理,方便后续调整
  • 📦 依赖补全:requirements.txt补全缺失的injector依赖

v2.0.36 (2026-02-20) - 定位功能优化与可靠性提升

  • 📍 定位脚本增强:重构定位脚本,添加网络连接质量测试,确保在网络不稳定时也能正常定位
  • 🗺️ 高德地图定位优化:增强高德地图定位API的使用,添加位置详情显示,提高定位精度和成功率
  • 🔄 综合定位流程:实现多级定位策略,优先尝试浏览器定位,失败后自动切换到高德地图定位
  • 🎯 精度判断:添加定位精度评估,当浏览器定位精度较低时自动尝试高德地图定位提高精度
  • 📊 详细日志:增强定位过程的详细日志输出,便于问题诊断和定位失败原因分析
  • 错误处理:优化定位失败的错误处理,提供更清晰的错误信息

v2.0.35 (2026-02-20) - 加载状态指示器按钮优化

  • 🎨 SVG图标替换:将加载状态指示器按钮的emoji图标替换为SVG图标,提升跨平台一致性
  • 🔄 旋转动画优化:实现SVG图标的平滑旋转动画,保持加载状态指示功能
  • 📱 跨平台一致性:SVG图标在不同系统上显示一致,不会因为系统字体设置不同而大小不一
  • 🔧 图标大小协调:与右侧按钮列表中其他按钮的图标大小保持一致
  • 📦 打包优化:更新打包脚本,确保SVG图标被正确包含在发布版本中
  • 类型错误修复:修复实现过程中的QRect/QRectF类型错误

v2.0.34 (2026-02-20) - 地图瓦片获取逻辑优化,移除代理和缓存机制

  • 🚀 直接获取瓦片:移除本地HTTP代理服务器,地图直接从在线瓦片服务器获取数据,加载速度显著提升
  • 🗺️ 高德地图优化:直接使用https://webrd01.is.autonavi.com/https://webst01.is.autonavi.com/提供的瓦片服务
  • 🌍 OSM地图优化:直接使用https://tile.openstreetmap.org/https://server.arcgisonline.com/提供的瓦片服务
  • 🧹 移除缓存逻辑:删除地图瓦片缓存相关代码和界面控件,简化系统架构
  • 🔧 代码清理:移除HTTP服务器相关依赖,简化地图渲染和保存逻辑
  • 📱 界面优化:删除日志设置界面中与地图瓦片缓存相关的控件
  • 性能提升:避免本地代理的延迟,直接连接在线瓦片服务器,地图加载速度更快

v2.0.33 (2026-02-13) - 地图瓦片缓存致命Bug修复

  • 🐛 缓存失败修复:修复瓦片请求路径解析错误导致所有地图瓦片无法缓存的严重问题
  • 🔧 数组越界修复:http_server.py中parts数组长度检查从< 5修正为< 6,避免访问parts[5]时越界
  • �️ OSM卫星地图缓存:修复OSM地图的satellite和hybrid模式不走代理服务器导致无法缓存的问题
  • 🛰️ ArcGIS支持:添加对ArcGIS瓦片源的支持,正确处理其特殊的URL格式({z}/{y}/{x})
  • 📊 日志增强:添加无效请求警告日志、缓存成功INFO日志、缓存命中DEBUG日志、瓦片加载失败ERROR日志
  • 🎯 影响范围:高德地图和OSM地图都受影响,v2.0.32版本无法创建新的瓦片缓存
  • 问题根源:瓦片URL格式/tiles/source/style/z/x/y有6个部分,但代码只检查至少5个部分,导致所有请求被400错误拒绝
  • 🏆 完整修复:确保所有地图模式(roadmap/satellite/hybrid)的瓦片都能正常下载并缓存到GaoDeMapData和OSMMapData目录

v2.0.32 (2026-02-13) - GPX导出进度优化与性能提升

  • 海拔数据获取进度条:分批获取海拔数据时实时更新进度条,显示当前批次和状态(获取中/插值计算/整理数据)
  • 🚀 性能优化:修复海拔数据整理阶段O(n²)算法瓶颈,使用字典替代双重循环,33,922个点的处理时间从31秒降至<0.1秒
  • 📊 进度可视化:20-40%获取海拔、35-45%插值计算、45-50%整理数据,用户可清晰了解导出进度
  • 🔧 导出修复:修复GPX导出时调用不存在的get_transport_mode()方法导致失败的问题,改为直接访问current_transport_mode属性
  • 💾 回调机制:为_get_elevation方法添加progress_callback参数,支持OSM和高德路由服务的进度回报
  • 用户体验:导出大路线(3万+点)时不再出现界面冻结,进度条平滑更新,操作反馈及时

v2.0.31 (2026-02-13) - 右键菜单坐标系统修复与交互优化

  • 🗺️ 坐标系二次转换修复:修复右键菜单设置起点/终点后,地图标记位置偏移70-80米的严重问题
  • 📍 坐标系保存完善:为途径点添加坐标系保存逻辑(waypoint_coord_systems),与起点/终点保持一致
  • 🎯 地图预览优化:update_map_preview_simple方法根据当前地图源正确推断坐标系(高德→GCJ-02,OSM→WGS-84)
  • 📌 位置信息面板:实现"这是哪儿"功能,右键点击地图显示位置详细信息(名称、地址、坐标、类型)
  • 🎨 深色主题风格:位置信息面板采用深色主题(#3b4453),与地图设置面板风格一致,支持文本选择复制
  • 🖱️ 自动关闭优化:位置信息面板使用Qt.Popup窗口类型,点击外部自动关闭,改善用户体验
  • 📝 日志级别调整:搜索结果清空日志从WARNING降为DEBUG,减少非必要警告信息
  • 问题根源:create_base_map默认按WGS-84处理坐标,导致高德地图的GCJ-02坐标被错误转换

v2.0.30 (2026-02-13) - 切换起止点后途径点信息保存修复

  • 🔄 途径点保持:修复切换起止点并重新规划路线后,途径点信息在历史记录中丢失的问题
  • 💾 _current_route_info同步:切换起止点时同步更新_current_route_info,确保途径点信息正确保存
  • 📝 完整路线记录:切换方向后(A→B→C 变为 C→B→A),途径点B的信息完整保存到历史记录
  • 🎯 问题根源:原代码只更新了data_manager中的数据,未更新_current_route_info导致保存时使用旧数据
  • 测试场景:原路线 A→B→C → 切换方向 → C→B→A → 规划路线 → 保存历史 → 途径点B正确保存

v2.0.29 (2026-02-13) - 历史记录弹出窗口焦点管理优化

  • 🎯 自动关闭优化:修复地址搜索历史记录弹出窗口在输入框失去焦点时不自动关闭的问题
  • ⏱️ 延迟关闭机制:添加150ms延迟关闭,确保用户有时间点击历史记录项
  • 🖱️ 智能检测:关闭前检查鼠标位置,如果鼠标在弹出窗口内则不关闭
  • 📍 全面覆盖:起点、终点、途径点输入框均添加focusOutEvent处理
  • 用户体验:点击面板其他区域时,历史记录弹出窗口自动消失,界面更加整洁

v2.0.28 (2026-02-13) - 地图配置保存逻辑修复,彻底解决API Key丢失问题

  • 🔐 API Key保护:修复地图模式切换时API Key被错误清空的严重问题
  • 🛡️ 配置保存优化:save_config方法智能判断,如果传入配置中没有api_key,则从现有配置中保留
  • 🔧 方法重构:set_map_mode、set_satellite_show_roads、set_close_action等方法只传递需要修改的字段
  • 📊 完整分析:通过日志分析发现,切换地图模式时调用save_config传递整个_config_data导致API Key丢失
  • 问题根源:_config_data中API Key存储在gaode/osm子对象中,而save_config期望从顶层获取,导致用空值覆盖
  • 🎯 彻底解决:所有配置保存场景均已修复,确保API Key等关键配置不会意外丢失

v2.0.27 (2026-02-13) - 历史记录弹出窗口键盘事件修复

  • ⌨️ 键盘事件修复:修复历史记录弹出窗口捕获所有键盘事件导致输入框退格键、回车键无法使用的问题
  • 🪟 窗口标志优化:将LocationHistoryPopup从Qt.Popup改为Qt.Tool,避免捕获输入框的键盘事件
  • 📝 输入体验改进:添加textChanged事件处理,用户开始输入时自动隐藏历史记录弹出窗口
  • 🔄 事件处理完善:添加keyPressEvent处理ESC键关闭弹出窗口,添加hideEvent清理选择状态
  • 全面覆盖:起点、终点、途径点输入框均支持正常的键盘输入和快捷键操作
  • 🛡️ 卡死问题解决:彻底解决输入时按回车键导致程序卡死的问题

v2.0.26 (2026-02-13) - 路线规划搜索交互优化与焦点循环修复

  • 🔍 搜索焦点修复:修复在地址输入框按回车搜索时,历史记录面板导致焦点重复获取引发程序卡死的问题
  • 🚫 历史面板管理:按回车执行搜索前,自动关闭历史记录面板,防止焦点事件冲突
  • 🛡️ 焦点循环防护:添加is_searching标志位,在搜索过程中阻止焦点事件重复触发历史面板显示
  • 交互流程优化:搜索操作流程更加清晰:关闭历史面板 → 设置搜索标志 → 执行搜索 → 显示结果 → 清除标志
  • 🔄 完整错误处理:在搜索成功、失败、无结果等所有场景下正确清除搜索标志位,确保状态一致
  • 🎯 稳定性提升:彻底解决焦点事件循环问题,避免用户输入搜索时的系统卡死

v2.0.25 (2026-02-13) - 坐标系统处理优化与配置加载增强

  • 🗺️ 途径点坐标系修复:修复高德地图途径点从历史记录选择后出现二次坐标转换导致位置偏移的问题
  • 🔧 坐标系追踪:在update_map_preview中正确追踪并传递坐标的实际坐标系,避免create_base_map重复转换
  • 📍 标记渲染优化:途径点标记渲染时优先使用保存的坐标系信息(waypoint_coord_systems)
  • 📝 配置日志增强:map_config保存和加载时添加详细日志,包含API Key长度、坐标系信息等调试信息
  • 一致性保证:确保从历史记录选择的地点(GCJ-02坐标)在高德地图上正确显示,无偏移

v2.0.24 (2026-02-13) - GPX导出元数据增强

  • 📝 版本标识:desc标签显示应用版本信息(Export from GPX Studio 2.0.24)
  • 🏷️ 结构化元数据:使用独立标签组织路线信息,而非单一desc文本块
  • 📍 起终点坐标:startPoint和endPoint标签包含名称及WGS84国际坐标
  • 🛣️ 途径点详情:waypoints标签列出所有途径点名称和序号
  • ⏱️ 时间信息:totalTime标签显示路线总时长(单位:分钟)
  • 🚗 交通方式:transportMode标签记录交通方式代码,keywords标签显示中文名称
  • 🔧 标准兼容:所有扩展信息放在metadata/extensions中,符合GPX规范

v2.0.23 (2026-02-13) - GPX导出海拔数据缓存功能

  • 💾 海拔数据缓存:导出GPX时,成功获取的海拔数据自动缓存到路线历史记录中
  • 智能复用:再次导出同一路线时,直接使用缓存的海拔数据,无需重新请求,显著提升导出速度
  • 🎯 精准匹配:历史记录匹配逻辑优化,增加途径点比较,确保相同路线正确识别
  • 🔧 记录更新:从历史记录导出时,海拔数据正确更新到原记录,避免创建重复记录
  • 🌐 API节约:减少地图服务API调用次数,节省配额,提高系统响应速度

v2.0.22 (2026-02-13) - 途径点序号显示优化

  • 🔢 序号显示:地图上的途径点标识中显示序号,蓝色圆形标记中央显示白色数字
  • 🗺️ 标记优化:途径点使用带序号的自定义标记(1、2、3...),更直观地显示路径顺序
  • 🎨 视觉改进:蓝色圆形背景配白色边框和白色数字,与起点(绿色)、终点(红色)形成清晰对比
  • 💡 用户体验:多途径点路线规划时,用户可以轻松识别每个途径点的顺序

v2.0.21 (2026-02-13) - 路线起止点切换功能增强

  • 🔄 切换起止点优化:修复切换起止点按钮点击后地图标记不更新的问题
  • 🎯 途径点反转:切换起止点时自动反转所有途径点顺序,实现完整的路线反向功能
  • 🗺️ 地图同步:切换操作后立即更新地图显示,起点/终点/途径点标记正确显示
  • 📍 数据一致性:确保UI面板、数据管理器和地图渲染三者数据完全同步
  • 用户体验:原路线 A→B→C→D 切换后变为 D→C→B→A,符合直观预期

v2.0.20 (2026-02-13) - 地图视图保持功能优化与统一管理

  • 🗺️ 清空地图优化:修复清空地图后视图偏移的问题,现在准确保持用户当前查看的位置和缩放
  • 🔄 实时视图获取:清空地图时通过JavaScript实时获取地图状态,而非使用可能过时的缓存值
  • 🎯 右键菜单优化:将右键菜单中的"清除路线"改为"清空地图",更准确描述功能
  • 📝 日志设置界面:简化标签文字(日志记录、地理信息、历史路线、界面渲染、地图瓦片)
  • 🧹 清理功能增强:各清理按钮不仅清理文件缓存,同时清理内存中的数据
  • 💡 架构分析:识别所有需要保持视图的操作场景,为未来统一视图管理奠定基础

v2.0.17 (2026-02-12) - 卸载流程进程检测和文件删除增强

  • 🔧 双重检测:在卸载初始化和卸载开始前两个阶段都检测并关闭程序
  • 🔄 多次重试:关闭程序和删除文件都采用多次重试机制(最多3次)
  • ⏱️ 等待延迟:每次重试之间增加等待时间,确保进程完全退出
  • 🛡️ 错误处理:如果程序无法关闭或文件无法删除,明确提示用户具体原因
  • 🧹 完整清理:确保卸载时程序被完全关闭,所有文件被正确删除

v2.0.16 (2026-02-12) - 卸载程序进程检测修复

  • 🔧 卸载优化:修复软件运行时卸载导致文件残留和程序未关闭的问题
  • 🛡️ 进程检测:卸载前自动检测GPX Studio是否正在运行
  • 🔄 自动关闭:提示用户是否自动关闭程序,支持手动取消卸载
  • 🧹 完整清理:确保卸载时正确关闭程序,文件被完全删除
  • 用户体验:卸载过程更加安全可靠,避免文件占用导致的卸载不完整

v2.0.12 (2026-02-11) - OSM地图镜像切换与限速优化

  • 🔄 镜像自动切换:添加OSM瓦片镜像服务器(a/b/c.tile.openstreetmap.org),遇到403/418/429自动切换
  • ⏱️ 请求限速:实现OSM请求间隔控制(100ms),符合OpenStreetMap使用政策,避免被封禁
  • 🔧 智能重试:封禁时自动切换到下一个可用镜像,提高瓦片加载成功率
  • ⚙️ 关闭优化:修复程序关闭时Session未关闭导致无法立即退出的问题
  • 🚨 封禁解决:解决特定瓦片被临时封禁时的加载失败问题

v2.0.11 (2026-02-11) - OSM地图缓存功能修复

  • 🗺️ OSM瓦片缓存:修复OSM地图瓦片无法缓存的问题,实现与高德地图一致的缓存机制
  • 🔧 代理服务器优化:OSM地图改为使用本地代理服务器,瓦片自动缓存到OSMMapData目录
  • 📡 请求头优化:根据不同的瓦片源(OSM/高德)动态设置合适的User-Agent和Referer
  • 合规性修复:User-Agent包含应用名称和联系方式,符合OpenStreetMap瓦片使用政策
  • 性能提升:OSM地图首次加载后,后续访问直接使用本地缓存,加载速度提升10倍以上

v2.0.10 (2026-02-11) - 台湾地区路线渲染修复

  • 🗺️ 坐标转换优化:修复台湾、香港、澳门地区路线渲染偏移问题
  • 🔧 GCJ-02坐标系:优化坐标转换判断逻辑,将台湾、香港、澳门排除在GCJ-02转换范围之外
  • 🎯 精准渲染:确保台湾等地区使用WGS84坐标系,避免双重转换导致的偏移
  • 📍 跨境路线:修复跨境路线规划(如台北到海口)在不同地区的坐标系统一致性问题

v2.0.9 (2026-02-11) - 系统稳定性与功能优化

  • 🔧 版本号更新:将版本号从2.0.8更新为2.0.9
  • 📝 文档更新:更新README.md文档,添加版本2.0.9的修改说明
  • HTTP服务器改进:添加错误处理和回退机制,改进服务器停止逻辑,添加下载线程池管理
  • 🗺️ 地图渲染优化:使用本地代理URL替代直接的高德地图URL,添加地图移动结束监听,添加瓦片加载监听
  • 🔍 WebEngine增强:改进JavaScript控制台消息处理,增加对移动和瓦片加载消息的支持
  • ⚙️ 地图配置扩展:添加关闭动作配置,提升系统灵活性
  • 🎨 UI组件优化:图标管理器和设置弹出窗口的改进
  • 🔄 系统稳定性:持续优化系统稳定性,提升用户体验

v2.0.8 (2026-02-11) - 地图元素管理与ZOOM功能优化

  • 🔍 ZOOM按钮:新增自动缩放按钮,点击后自动调整地图视图以显示所有元素
  • 🗺️ 地图元素保持:修复ZOOM操作后路线和标记点丢失的问题,确保所有元素持续显示
  • 🔧 地图管理器增强:优化show_map方法,自动添加已选择的点和路线数据
  • 📱 用户体验:当地图无元素时,点击ZOOM按钮保持现状,避免不必要的地图移动

v2.0.7 (2026-02-11) - 高德地图路线规划修复

  • 🗺️ 途径点修复:修复高德地图路线规划中多个途径点不生效的问题,现在支持正确规划包含多个途径点的路线
  • 🔧 API参数优化:修正高德地图API途径点参数格式,使用英文分号作为多个途径点的分隔符
  • 📍 路线准确性:确保路线规划严格按照用户设置的起点、途经点(按顺序)、终点的顺序进行规划

v2.0.6 (2026-02-11) - GPX导出时间计算优化

  • ⏱️ 智能时间计算:GPX导出时,途径点时间根据路线规划的预估总时长自动计算,而非简单的固定间隔
  • 🎯 精准时间分配:起始时间使用用户设置的时间,后续每个点的时间按总路程/点数均匀分布
  • 🔧 向后兼容:如果未提供预估总时长,保持默认10秒间隔行为

v2.0.5 (2026-02-10) - GPX导出功能优化

  • 📁 导出路径记忆:导出GPX文件时,默认使用上次导出的路径,提高用户体验
  • 📅 文件名时间后缀:GPX文件名自动添加起始时间后缀,格式为 起点_终点_20260210_0930.gpx
  • 💾 配置管理:添加导出路径的配置文件存储,确保设置持久化
  • 🔧 代码优化:重构导出路径管理逻辑,使代码更加清晰易维护

v2.0.4 (2026-02-10) - 地图模式切换功能

  • 🗺️ 地图模式切换:新增地图模式切换按钮,支持卫星/街道地图切换,点击时保持地图预览区域不变
  • 💾 地图模式保存:地图模式设置保存到配置中,下次启动时保持相同模式
  • 🏷️ 卫星地图标注:为卫星地图添加标注图层,显示地名和街道名等地理信息
  • 🔧 代码优化:修复地图模式切换时的参数名称错误,确保功能正常运行

v2.0.3 (2026-02-10) - 界面优化与功能完善

  • 🎨 加载按钮优化:替换加载按钮图标为圆形样式,修复旋转动画偏心问题,确保与其他按钮对齐
  • 🔧 地图设置面板:高德地图切换时强制连接测试,保存按钮状态管理优化
  • 🛠️ 路线规划面板:移除冗余加载按钮,使用占位控件保持布局对齐
  • 🔧 代码优化:修复搜索地址时的错误处理,提高系统稳定性

v2.0.2 (2026-02-10) - GPX导出功能优化

  • 📅 时间记忆功能:导出GPX数据时,起始时间默认值会记忆上次设置的时间,提高用户体验
  • 🛠️ 配置管理:添加时间设置的配置文件存储,确保设置持久化
  • 🔧 代码优化:重构时间管理逻辑,使代码更加清晰易维护

v2.0.1 (2026-02-10) - 安装程序优化

  • 📦 安装程序修复:修复默认安装路径显示错误的问题,确保升级时显示正确的新版本路径
  • 🎨 界面优化:调整安装和卸载引导界面高度,使界面更加紧凑美观
  • 🔧 打包修复:修复打包过程中的语法错误,确保安装程序能够正常编译
  • 📝 日志增强:添加详细的安装过程日志,便于问题诊断

v2.0.0 (2026-01-16) - 重大更新

  • 多路线方案:驾车路线提供3条备选方案(推荐/最短/躲避拥堵),支持对比和切换
  • 📁 统一数据管理:所有数据文件集中存储在GPXStudioData目录,支持开发和打包环境
  • 🗺️ 地图缓存:高德和OSM地图数据独立缓存,显著提升加载速度
  • ⌨️ 快捷键支持:ESC键快速关闭弹出面板,Enter键快速搜索
  • 🎨 UI优化:右侧按钮垂直居中,窗口大小调整为1000x600,全局字体统一为微软雅黑
  • 🔧 配置优化:地图配置保存后自动重新加载,API Key配置问题修复
  • 🐛 Bug修复:放大缩小按钮功能修复,历史记录自动恢复坐标

贡献与许可

许可证: MIT License

贡献流程:

  1. Fork 仓库
  2. 创建分支 (git checkout -b feature/YourFeature)
  3. 提交代码 (git commit -m 'Add feature')
  4. 推送分支 (git push origin feature/YourFeature)
  5. 提交 Pull Request

联系方式:


⭐ 如果这个项目对您有帮助,欢迎 Star!

About

基于 PyQt5 的开源 GPX 路线规划工具,支持多交通方式、智能缩放、实时预览。

Resources

Stars

22 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages