当前位置: 首页 > news >正文

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文档可视化小工具了,希望可以帮助到大家。

相关文章:

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

背景 当我们收到别人分享的航迹文档,即gpx文档时,如何快速的进行浏览呢?我们可以使用GIS软件来打开gpx文档并显示gpx中所记录的航迹,例如常用的GIS软件有googleEarth, Basecamp, GPXsee, GPX E…...

学信息系统项目管理师第4版系列18_采购管理

1. 协议 1.1. 合同 1.1.1. 国际合作的项目经理应牢记,无论合同规定如何详尽,文化和当地法律对合同及其可执行性均有影响 1.2. 服务水平协议(SLA) 1.3. 谅解备忘录 1.4. 协议备忘录(MOA) 1.5. 订购单 …...

标准化数据模型

标准化数据模型 标准化被定义为减少或消除数据集中冗余的过程。 它已成为关系数据库中数据建模的事实上的方法,很大程度上是由于这些系统最初设计时所围绕的底层资源限制:缓慢的磁盘和昂贵的 RAM。更少的数据冗余/重复意味着更有效地从磁盘读取数据并占…...

linux平台源码编译ffmpeg

目录 编译平台 编译步骤 编译平台 中标麒麟 编译步骤 1 从Download FFmpeg 下载源码,我选中了4.2.9版 2 解压 3 在解压后的目录下输入 ./configure --enable-shared --prefix/usr/local/ffmpeg 4 make 5 sudo make install 6 ffmpeg的头文件、可执行程…...

Vue中如何进行拖拽与排序功能实现

在Vue中实现拖拽与排序功能 在Web应用程序中,实现拖拽和排序功能是非常常见的需求,特别是在管理界面、任务列表和图形用户界面等方面。Vue.js作为一个流行的JavaScript框架,提供了许多工具和库来简化拖拽和排序功能的实现。本文将介绍如何使…...

新款UI动态壁纸头像潮图小程序源码

新款UI动态壁纸头像潮图小程序源码,不需要域名服务器,直接添加合法域名,上传发布就能使用。 可以对接开通流量主,个人也能运营,不需要服务器源码完整。整合头像,动态壁纸,文案功能齐全。 源码…...

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

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

【C语言经典100例题-70】求一个字符串的长度(指针)

代码 使用指针来遍历字符串&#xff0c;直到遇到字符串结尾的空字符\0为止&#xff0c;统计字符数量即为字符串长度。 #include<stdio.h> #define n 20 int getlength(char *a) {int len 0;while(*a!\0){len;a;}return len; } int main() {char *arr[n] { 0 };int l…...

十天学完基础数据结构-第八天(哈希表(Hash Table))

哈希表的基本概念 哈希表是一种数据结构&#xff0c;用于存储键值对。它的核心思想是将键通过哈希函数转化为索引&#xff0c;然后将值存储在该索引位置的数据结构中。 哈希函数的作用 哈希函数是哈希表的关键部分。它将输入&#xff08;键&#xff09;映射到哈希表的索引位…...

flink集群部署

虚拟机配置 bigdata-hmaster 192.168.135.112 4核心 32GB bigdata-hnode1 192.168.135.113 4核心 16GB bigdata-hnode2 192.168.135.114 4核心 16GB 安装包&#xff1a;https://dlcdn.apache.org/flink/flink-1.17.1/flink-1.17.1-bin-scala_2.12.tgz 放到/usr/lcoal/lib目录…...

2.证明 非单一点 Oct.2023

目录 原题解引申出的编程问题非单一点题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 提示 题解题目正解 原题 已知等边 Δ P 0 P 1 P 2 \Delta P_0P_1P_2 ΔP0​P1​P2​&#xff0c;它的外接圆是 O O O&#xff0c;设 O O O的半径是 R R R。同时&#xff0c;设 Δ …...

常见的软件脱壳思路

单步跟踪法 1.本方法采用OD载入。 2.跟踪F8&#xff0c;实现向下的跳。 3.遇到程序回跳按F4。 4.绿色线条表示跳转没实现&#xff0c;不用理会&#xff0c;红色线条表示跳转已经实现&#xff01; 5.刚载入程序有一个CALL的&#xff0c;我们就F7跟进去&#xff0c;不然程序很容…...

Python:torch.nn.Conv1d(), torch.nn.Conv2d()和torch.nn.Conv3d()函数理解

Python&#xff1a;torch.nn.Conv1d(), torch.nn.Conv2d()和torch.nn.Conv3d()函数理解 1. 函数参数 在torch中的卷积操作有三个&#xff0c;torch.nn.Conv1d(),torch.nn.Conv2d()还有torch.nn.Conv3d(),这是搭建网络过程中常用的网络层&#xff0c;为了用好卷积层&#xff0…...

scala 连接 MySQL 数据库案例

1 依赖准备 mysql 8添加&#xff1a; <dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.29</version></dependency> mysql 5 添加&#xff1a; <dependency><grou…...

guava工具类常用方法

Guava是Google开发的一个Java开源工具类库&#xff0c;它提供了许多实用的工具类和功能&#xff0c;可以简化Java编程中的常见任务。 引入依赖 <dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version>2…...

CSShas伪类选择器案例附注释

<!DOCTYPE html> <html lang="en"> <head><meta charset...

nodejs+vue中医体质的社区居民健康管理系统elementui

可以实现首页、中医体质量表、健康文章、健康视频、我的等&#xff0c;在我的页面可以对医生、小区单元、医疗药品等功能进行操作。目前主要的健康管理系统是以西医为主&#xff0c;而为了传扬中医文化&#xff0c;提高全民健康意识&#xff0c;解决人民日益增长的美好生活需要…...

Kotlin中reified 关键字

前言 在开始之前&#xff0c;让我们先讨论一下泛型。泛型用于为类、函数或接口提供通用的实现。下面是一个示例泛型方法&#xff1a; fun <T> displayValue(value: T) {println(value) }fun main() {displayValue<String>("Generics")displayValue<…...

Linux命令(95)之alias

linux命令之alias 1.alias介绍 linux命令alias是用来将/bin目录下的命令进行别名设置&#xff0c;将一些较长的命令进行简化。 alias命令的作用只局限于该次登入的操作&#xff0c;相当于临时变量。 如果对当前用户永久生效&#xff0c;需修改~/.bashrc文件&#xff0c;使用…...

DHCPsnooping 配置实验(2)

DHCP报文泛洪攻击 限制接收到报文的速率 vlan 视图或者接口视图 dhcp request/ dhcp-rate dhcp snooping check dhcp-request enable dhcp snooping alarm dhcp-request enable dhcp snooping alarm dhcp-request threshold 1 超过则丢弃报文 查看[Huawei]dis dhcp statistic…...

K8S认证|CKS题库+答案| 11. AppArmor

目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作&#xff1a; 1&#xff09;、切换集群 2&#xff09;、切换节点 3&#xff09;、切换到 apparmor 的目录 4&#xff09;、执行 apparmor 策略模块 5&#xff09;、修改 pod 文件 6&#xff09;、…...

CentOS下的分布式内存计算Spark环境部署

一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架&#xff0c;相比 MapReduce 具有以下核心优势&#xff1a; 内存计算&#xff1a;数据可常驻内存&#xff0c;迭代计算性能提升 10-100 倍&#xff08;文档段落&#xff1a;3-79…...

EtherNet/IP转DeviceNet协议网关详解

一&#xff0c;设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络&#xff0c;本网关连接到EtherNet/IP总线中做为从站使用&#xff0c;连接到DeviceNet总线中做为从站使用。 在自动…...

优选算法第十二讲:队列 + 宽搜 优先级队列

优选算法第十二讲&#xff1a;队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...

C++使用 new 来创建动态数组

问题&#xff1a; 不能使用变量定义数组大小 原因&#xff1a; 这是因为数组在内存中是连续存储的&#xff0c;编译器需要在编译阶段就确定数组的大小&#xff0c;以便正确地分配内存空间。如果允许使用变量来定义数组的大小&#xff0c;那么编译器就无法在编译时确定数组的大…...

技术栈RabbitMq的介绍和使用

目录 1. 什么是消息队列&#xff1f;2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...

AirSim/Cosys-AirSim 游戏开发(四)外部固定位置监控相机

这个博客介绍了如何通过 settings.json 文件添加一个无人机外的 固定位置监控相机&#xff0c;因为在使用过程中发现 Airsim 对外部监控相机的描述模糊&#xff0c;而 Cosys-Airsim 在官方文档中没有提供外部监控相机设置&#xff0c;最后在源码示例中找到了&#xff0c;所以感…...

mac 安装homebrew (nvm 及git)

mac 安装nvm 及git 万恶之源 mac 安装这些东西离不开Xcode。及homebrew 一、先说安装git步骤 通用&#xff1a; 方法一&#xff1a;使用 Homebrew 安装 Git&#xff08;推荐&#xff09; 步骤如下&#xff1a;打开终端&#xff08;Terminal.app&#xff09; 1.安装 Homebrew…...

多模态图像修复系统:基于深度学习的图片修复实现

多模态图像修复系统:基于深度学习的图片修复实现 1. 系统概述 本系统使用多模态大模型(Stable Diffusion Inpainting)实现图像修复功能,结合文本描述和图片输入,对指定区域进行内容修复。系统包含完整的数据处理、模型训练、推理部署流程。 import torch import numpy …...

Qt 事件处理中 return 的深入解析

Qt 事件处理中 return 的深入解析 在 Qt 事件处理中&#xff0c;return 语句的使用是另一个关键概念&#xff0c;它与 event->accept()/event->ignore() 密切相关但作用不同。让我们详细分析一下它们之间的关系和工作原理。 核心区别&#xff1a;不同层级的事件处理 方…...