• 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=%1
    
    echo.
    echo %srcDir%
    echo.
    
    python "%~dp0gpxShower.py" --gpx文档=%1
    
    echo.
    echo 5s后自动退出窗口
    timeout /t 5
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    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文档, 画板=画板.副本.缩进())
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123
    • 124
    • 125
    • 126
    • 127
    • 128
    • 129
    • 130
    • 131
    • 132
    • 133

    设置打开方式

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

  • 相关阅读:
    从 0 搭建 Vite 3 + Vue 3 前端工程化项目
    【开源日记】宿舍断电自动关灯设备(二)
    26、Java 简单实现单例设计模式(饿汉式和懒汉式)
    Redis持久化
    java基础题--数组
    单层神经网络
    GreenPlum DB向GBase迁移_TIMESTAM类型
    三子棋——C语言初阶
    vue+echarts项目一:前端准备工作
    【计算机视觉】二、图像形成:1、向量和矩阵的基本运算:线性变换与齐次坐标
  • 原文地址:https://blog.csdn.net/weixin_42148809/article/details/133593820