GPX可视化工具 GPX航迹预览工具

背景

当我们收到别人分享的航迹文档,即gpx文档时,如何快速的进行浏览呢?我们可以使用GIS软件来打开gpx文档并显示gpx中所记录的航迹,例如常用的GIS软件有googleEarth, Basecamp, GPXsee, GPX Editor 等。
今天教分享一个脚本,大家可以不依赖上述软件即可快速的浏览gpx航迹。

准备工作

本文所分享的脚本,需要依赖python工作,所以需要电脑上安装python解释器哦。

基本原理

本文所分享的脚本,其工作的基本逻辑如下:

  • bat脚本获取gpx文档
  • 调用py脚本打开并解析gpx文档内容
  • py脚本根据gpx内容并使用gpxAndMap模块生成folium地图文档(html文档)
  • py脚本直接调用浏览器打开所生成的html文档进行显示航迹

两个脚本展示

以下为今天所分享的两个脚本,一个bat脚本,一个py脚本,这两个脚本需要放在同一路径下才可正常工作哦
20231006001652

bat脚本内容

@echo off
chcp 65001
set srcDir=%1echo.
echo %srcDir%
echo.python "%~dp0gpxShower.py" --gpx文档=%1echo.
echo 5s后自动退出窗口
timeout /t 5

py脚本内容

# -*- coding:UTF-8 -*-# region 引入必要的依赖
import os模块名 = 'GpsAndMap'
try:from GpsAndMap.MapModule import *
except ImportError as impErr:print(f"尝试导入 {模块名} 依赖时检测到异常:{impErr}")print(f"尝试安装 {模块名} 模块:")try:os.system(f"pip install {模块名}")except OSError as osErr:print(f"尝试安装模块 {模块名} 时检测到异常:{osErr}")exit(0)else:try:from GpsAndMap.MapModule import *except ImportError as impErr:print(f"再次尝试导入 {模块名} 依赖时检测到异常:{impErr}")exit(0)模块名 = 'DebugInfo'
try:from DebugInfo.DebugInfo import *
except ImportError as impErr:print(f"尝试导入 {模块名} 依赖时检测到异常:{impErr}")print(f"尝试安装 {模块名} 模块:")try:os.system(f"pip install {模块名}")except OSError as osErr:print(f"尝试安装模块 {模块名} 时检测到异常:{osErr}")exit(0)else:try:from DebugInfo.DebugInfo import *except ImportError as impErr:print(f"再次尝试导入 {模块名} 依赖时检测到异常:{impErr}")exit(0)模块名 = 'gpxpy'
try:import gpxpy
except ImportError as impErr:print(f"尝试导入 {模块名} 依赖时检测到异常:{impErr}")print(f"尝试安装 {模块名} 模块:")try:os.system(f"pip install {模块名}")except OSError as osErr:print(f"尝试安装模块 {模块名} 时检测到异常:{osErr}")exit(0)else:try:import gpxpyexcept ImportError as impErr:print(f"再次尝试导入 {模块名} 依赖时检测到异常:{impErr}")exit(0)# endregionclass 入参类(入参基类):def __init__(self):# 初始化父类super().__init__()# 添加入参参数self._添加参数('gpx文档', str, '请指定需要解析的gpx文档')# region 访问器@propertydef gpx文档(self) -> str:if 'gpx文档' in self._参数字典:return self._参数字典['gpx文档'].else:return ''@gpx文档.setterdef gpx文档(self,: str):if 'gpx文档' in self._参数字典:self._参数字典['gpx文档'].= str()# endregiondef 展示gpx数据(gpx文档: str, 画板: 打印模板 = None):画板 = 画板 if isinstance(画板, 打印模板) else 打印模板()画板.执行位置(展示gpx数据)if not gpx文档:画板.提示错误('gpx文档 无值')return Falseif not os.path.isfile(gpx文档):画板.提示错误(f'gpx文档 不存在:{gpx文档}')return False# 创建一个地图对象,并添加高德地图,高德卫星地图底图地图: 地图类 = 地图类().添加瓦片.高德地图().高德卫星地图().智图GeoQ().地图# 添加一个网页标题,显示gpx文档名地图.添加网页标题(os.path.basename(gpx文档))with open(gpx文档, 'r') as f:gpx数据 = gpxpy.parse(f)if gpx数据 and gpx数据.tracks:for track in gpx数据.tracks:if track.segments:for seg in track.segments:if seg.points:折线 = 折线类(蚂蚁路径=蚂蚁路径标记类(显示=True))for point in seg.points:折线.添加路径点(GPS坐标类(point.longitude, point.latitude, GPS坐标系类型.wgs84))地图.添加标记(地图.添加图层(), 折线)地图.优化网络资源().保存html(文档名=f"{os.path.basename(gpx文档)}.html", 目标路径=os.path.dirname(os.path.abspath(gpx文档)), 画板=画板.副本.缩进()).打开()return Trueif __name__ == '__main__':画板: 打印模板 = 打印模板(True)入参: 入参类 = 入参类()入参.解析入参(画板=画板.副本.缩进())if 画板.正在调试:入参.展示(画板=画板.副本.缩进())if not 入参.gpx文档:画板.提示错误('未指定gpx文档')if not 画板.正在调试:exit(0)else:展示gpx数据(gpx文档=入参.gpx文档, 画板=画板.副本.缩进())

设置打开方式

在windows中, 我们可以通过设置gpx文档的打开方式,来设置我们使用bat脚本做为默认的gpx文档的打开应用。设置方式如下图所示👇
20231006002258

设置完成后,当我们双击gpx文档时,系统会自动调用【gpxShower.bat】来打开/处理gpx文档,并生成html文档,并自动调用浏览器打开该html文档。

如下图👇所示,当我们双击gpx文档后,bat脚本+py脚本将会在同路径下创建同名html文档,做为gpx航迹的可视化文档。并且当我们再次双击同一gpx文档后,html文档会重新生成并覆盖旧的html文档。
20231006002601

效果展示

如下图👇,在html文档中,我们首先可以看到gpx文档的文档名被显示为网页的标题,这样当我们打开浏览多个gpx文档时,不至于会发生混淆。
20231006002747

如下图👇,在html文档中,我们可以看到gpx航迹的地图有三种,分别是普通高德地图, 高德卫星地图, 和智力GeoQ地图,三种底图分别提供了不同的地图风格,以供我们选择使用。
20231006002927

如下图👇,在html文档中,gpx航迹以蚂蚁路径的效果显示。
20231006003312_rec_

如下图👇,这是在高德卫星地图下的显示效果。
Snipaste_2023-10-05_23-35-26 gpx轨迹可视化效果 高德卫星图效果

如下图👇,这是在智力GeoQ地图下的显示效果。
Snipaste_2023-10-05_23-36-34 gpx轨迹可视化效果 智图GeoQ效果

如下图👇,这是在高速互通场景下的显示效果,可以看出,轨迹显示与地图道路的匹配度是不错的。
20231006003709
20231006003802

优点

参考下图👇,我们可以看出,gpx文档大概是1MB的体积,但生成的html文档只有564KB的体积,我们可以很方便的把html文档作为分离的媒介,以使对方可以在不安装GIS软件的情况下,浏览我们的航迹信息。
20231006004122

注意点

如下图👇,我们可以看到在生成的html文档中引用了大量的js/css资源,这些资源的加载需要互联网的支持,如果您在使用此脚本方法时,发现html文档打开是空白,或者打开时间过长,请检查您的网络链接是否畅通。
Snipaste_2023-10-06_00-49-28

小结

以上就是这次分享的gpx文档可视化小工具了,希望可以帮助到大家。
B-1696525190859)]

注意点

如下图👇,我们可以看到在生成的html文档中引用了大量的js/css资源,这些资源的加载需要互联网的支持,如果您在使用此脚本方法时,发现html文档打开是空白,或者打开时间过长,请检查您的网络链接是否畅通。
[外链图片转存中…(img-d8tDDylY-1696525190860)]

小结

以上就是这次分享的gpx文档可视化小工具了,希望可以帮助到大家。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/125588.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ffmpeg之去除视频水印

ffmpeg去除水印使用delogo视频滤镜。 delogo参数: x,y,w,h分别表示logo区域的左上角位置及宽度和高度; show:0表示不显示logo区域,1表示显示logo区域。 执行下面的命令: ffmpeg -i 1.mp4 -vf delogox300:y10:w80:h30:show0 out.mp4 效果…

华为云云耀云服务器L实例评测|基于canal缓存自动更新流程 SpringBoot项目应用案例和源码

前言 最近华为云云耀云服务器L实例上新,也搞了一台来玩,期间遇到各种问题,在解决问题的过程中学到不少和运维相关的知识。 在之前的博客中,介绍过canal的安装和配置,参考博客 拉取创建canal镜像配置相关参数 & …

克服网络安全压力:如何掌控无限的云数据

管理云中的数字风险比以往任何时候都更加重要。数字化转型引发的云数据呈指数级增长,为安全分析师创造了一个更大的威胁环境。随着威胁行为者继续危害组织最敏感的数据,这一挑战将会加剧。 预计未来五年全球网络犯罪成本将激增,从 2022 年的…

3D 毛玻璃晶质见证卡

效果展示 页面结构 从上面的效果展示来看,页面主要成员是一张卡片,并且卡片上有三个小矩形,而小矩形上会展示对应的内容。 当鼠标悬停在卡片上时,卡片会随着鼠标的移动而改变视角。 CSS3 知识点 transform-style 属性的 prese…

linux入门---信号的理解

目录标题 如何理解计算机中的信号如何查看计算机中的信号初步了解信号的保存和发送如何向目标进程发送信号情景一:使用键盘发送信号情景二:系统调用发送信号情景三:硬件异常产生信号情景四:软件条件产生信号 核心转储信号的两个问…

Elasticsearch基础篇(二):Elasticsearch在windows和liunx上的安装部署

Elasticsearch简介 前言1. Windows环境部署Elasticsearch1.1 下载并解压Elasticsearch压缩包1.2 命令行启动elasticsearch1.3 验证是否成功启动elasticsearch1.4 关闭Elasticsearch1.5 在Windows上安装Elasticsearch作为服务 2. Liunx环境部署Elasticsearch安装 Elasticsearch …

逆变器下垂控制单机

仿真控制参数 主电路 坐标变换 功率计算 下垂控制 电压电流双闭环控制 结果变量监控 断路器闭合,负载突增 负载突增,有功和无功突增 有功增加,频率减小 无功增加,参考电压减小

基于JavaWeb技术的在线考试系统设计与实现

目录 前言 一、技术栈 二、系统功能介绍 用户信息管理 考试统计管理 专业列表管理 忘记密码人员登记管理 修改密码 试卷信息 考试信息管理 三、核心代码 1、登录模块 2、文件上传模块 3、代码封装 前言 随着信息技术在管理上越来越深入而广泛的应用,管理…

Linux Vi编辑器基础操作指南

Linux Vi编辑器基础操作指南 Linux中的Vi是一个强大的文本编辑器,虽然它有一些陡峭的学习曲线,但一旦掌握了基本操作,它就变得非常高效。以下是Vi编辑器的一些基本用法: 打开Vi编辑器: vi 文件名退出Vi编辑器&#xff…

pygame - 贪吃蛇小游戏

蛇每吃掉一个身体块,蛇身就增加一个长度。为了统一计算,界面的尺寸和游戏元素的位置都是身体块长度的倍数 1. 上下左右方向键(或者ASDW键)控制蛇的移动方向 2. 空格键暂停和继续蛇的身体图片文件,复制到项目的asset\im…

Python逐日填补Excel中的日期并用0值填充缺失日期的数据

本文介绍基于Python语言,读取一个不同的列表示不同的日期的.csv格式文件,将其中缺失的日期数值加以填补;并用0值对这些缺失日期对应的数据加以填充的方法。 首先,我们明确一下本文的需求。现在有一个.csv格式文件,其第…

1.7.C++项目:仿muduo库实现并发服务器之Poller模块的设计

项目完整在: 文章目录 一、Poller模块:描述符IO事件监控模块二、提供的功能三、实现思想(一)功能(二)意义(三)功能设计 四、封装思想五、代码(一)框架&#…