头图

背景

当我们收到别人分享的航迹文档,即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=%1

echo.
echo %srcDir%
echo.

python "%~dp0gpxShower.py" --gpx文档=%1

echo.
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 gpxpy
        except ImportError as impErr:
            print(f"再次尝试导入 {模块名} 依赖时检测到异常:{impErr}")
            exit(0)

# endregion


class 入参类(入参基类):
    def __init__(self):
        # 初始化父类
        super().__init__()

        # 添加入参参数
        self._添加参数('gpx文档', str, '请指定需要解析的gpx文档')

    # region 访问器
    @property
    def gpx文档(self) -> str:
        if 'gpx文档' in self._参数字典:
            return self._参数字典['gpx文档'].值
        else:
            return ''

    @gpx文档.setter
    def gpx文档(self, 值: str):
        if 'gpx文档' in self._参数字典:
            self._参数字典['gpx文档'].值 = str(值)
    # endregion


def 展示gpx数据(gpx文档: str, 画板: 打印模板 = None):
    画板 = 画板 if isinstance(画板, 打印模板) else 打印模板()
    画板.执行位置(展示gpx数据)

    if not gpx文档:
        画板.提示错误('gpx文档 无值')
        return False
    if 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 True


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


三块钱
7 声望0 粉丝

引用和评论

0 条评论