GPX格式详解,javascript写入读取GPX示例

news2025/2/22 8:24:32

还是大剑师兰特:曾是美国某知名大学计算机专业研究生,现为航空航海领域高级前端工程师;CSDN知名博主,GIS领域优质创作者,深耕openlayers、leaflet、mapbox、cesium,canvas,webgl,echarts等技术开发,欢迎加底部微信(gis-dajianshi),一起交流。

No.内容链接
1Openlayers 【入门教程】 - 【源代码+示例300+】
2Leaflet 【入门教程】 - 【源代码+图文示例 150+】
3Cesium 【入门教程】 - 【源代码+图文示例200+】
4MapboxGL【入门教程】 - 【源代码+图文示例150+】
5前端就业宝典 【面试题+详细答案 1000+】

在这里插入图片描述

文章目录

    • 一、GPX 格式的基本结构
    • 二、示例 GPX 文件
    • 三、GPX在gis中实战示例
      • 1、cesium加载GPX文件,显示图形
      • 2、vue+openlayers上传GPX文件,导出geojson文件
      • 3、vue+leaflet 加载gpx数据,导出为geoJson文件
    • 四、使用 JavaScript 处理 GPX 文件
      • 1、安装所需的库
      • 2、写入 GPX 文件
      • 3、读取 GPX 文件


GPX(GPS eXchange Format)是一种基于 XML 的文件格式,主要用于存储 GPS 轨迹数据。GPX 文件通常包含点(waypoints)、路径(routes)和轨迹(tracks)。这种格式广泛应用于户外活动,如徒步旅行、自行车骑行、登山等,因为它能够精确地记录和分享地理信息。

一、GPX 格式的基本结构

一个基本的 GPX 文件通常包含以下元素:

  1. <gpx>:根元素,必须指定版本号。
  2. <wpt>:表示一个点(waypoint)。
  3. <rte>:表示一条路线(route),包含多个 <rtept> 元素。
  4. <trk>:表示一条轨迹(track),包含多个 <trkseg> 元素,每个 <trkseg> 包含多个 <trkpt> 元素。
  5. <name><desc><cmt><time>:分别表示名称、描述、注释和时间等元数据。
  6. <ele>:表示海拔高度。
  7. <sym><type><fix><sat><hdop><vdop><pdop><ageofdgpsdata><dgpsid>:用于表示 GPS 设备的状态信息。

二、示例 GPX 文件

<gpx version="1.1" creator="Example GPX Creator">
  <trk>
    <name>Example Track</name>
    <trkseg>
      <trkpt lat="37.4222898" lon="-122.0822035">
        <ele>0</ele>
        <time>2024-08-06T10:00:00Z</time>
      </trkpt>
      <trkpt lat="37.4224898" lon="-122.0824035">
        <ele>0</ele>
        <time>2024-08-06T10:01:00Z</time>
      </trkpt>
      <trkpt lat="37.4226898" lon="-122.0826035">
        <ele>0</ele>
        <time>2024-08-06T10:02:00Z</time>
      </trkpt>
    </trkseg>
  </trk>
</gpx>

三、GPX在gis中实战示例

1、cesium加载GPX文件,显示图形

https://dajianshi.blog.csdn.net/article/details/129839516
在这里插入图片描述

2、vue+openlayers上传GPX文件,导出geojson文件

https://dajianshi.blog.csdn.net/article/details/129463128

在这里插入图片描述

3、vue+leaflet 加载gpx数据,导出为geoJson文件

https://dajianshi.blog.csdn.net/article/details/129401528

在这里插入图片描述

四、使用 JavaScript 处理 GPX 文件

在 JavaScript 中处理 GPX 文件通常需要借助于一些第三方库,因为原生的 JavaScript API 不直接支持 GPX 文件的读写。下面我们将使用 Node.js 环境以及 xml-jsxml2js 库来演示如何读取和写入 GPX 文件。

1、安装所需的库

首先,确保你已经安装了 Node.js 和 npm,然后运行以下命令来安装必要的库:

npm install xml-js xml2js

2、写入 GPX 文件

const fs = require('fs');
const xmlBuilder = require('xml-js');

const gpxData = {
  "gpx": {
    "@_version": "1.1",
    "@_creator": "Example GPX Creator",
    "trk": {
      "name": "Example Track",
      "trkseg": [
        {
          "trkpt": [
            {
              "@_lat": "37.4222898",
              "@_lon": "-122.0822035",
              "ele": "0",
              "time": "2024-08-06T10:00:00Z"
            },
            {
              "@_lat": "37.4224898",
              "@_lon": "-122.0824035",
              "ele": "0",
              "time": "2024-08-06T10:01:00Z"
            },
            {
              "@_lat": "37.4226898",
              "@_lon": "-122.0826035",
              "ele": "0",
              "time": "2024-08-06T10:02:00Z"
            }
          ]
        }
      ]
    }
  }
};

const options = { compact: true, spaces: 4 };
const xml = xmlBuilder.js2xml(gpxData, options);

fs.writeFile('example.gpx', xml, (err) => {
  if (err) throw err;
  console.log('GPX file has been written.');
});

3、读取 GPX 文件

const fs = require('fs');
const xmlParser = require('xml2js');

fs.readFile('example.gpx', 'utf8', (err, data) => {
  if (err) throw err;
  
  xmlParser.parseString(data, (parseErr, result) => {
    if (parseErr) throw parseErr;
    
    // 获取轨迹信息
    const trkseg = result.gpx.trk[0].trkseg[0];
    const trackPoints = trkseg.trkpt;
    
    trackPoints.forEach((point, index) => {
      const lat = point['_$']['@_lat'];
      const lon = point['_$']['@_lon'];
      const ele = point.ele[0];
      const time = point.time[0];
      
      console.log(`Point ${index + 1}: Lat=${lat}, Lon=${lon}, Ele=${ele}, Time=${time}`);
    });
  });
});

示例输出
当运行上述读取代码时,控制台将输出:

Point 1: Lat=37.4222898, Lon=-122.0822035, Ele=0, Time=2024-08-06T10:00:00Z
Point 2: Lat=37.4224898, Lon=-122.0824035, Ele=0, Time=2024-08-06T10:01:00Z
Point 3: Lat=37.4226898, Lon=-122.0826035, Ele=0, Time=2024-08-06T10:02:00Z

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何使用Markdown编辑器

欢迎使用Markdown编辑器 你好&#xff01; 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章&#xff0c;了解一下Markdown的基本语法知识。 新的改变 我们对Markdown编辑器进行了一些功能拓展与语法支持&#x…

【PLC】关于子程序功能以及编程过程中的部分心得

博主在使用GX Works对三菱PLC编程的时候用到了子程序功能&#xff0c;这里将使用子程序功能中的一点心得以及编程过程中的部分心得分享给大家。 博主主要对以下几个问题有一些心得&#xff1a; 1、如何调试带有子程序的程序&#xff1f; 2、如何让程序按照计划的顺序去执行&…

【OpenCV C++20 学习笔记】自定义线性滤波-filter2D

自定义线性滤波 原理相关卷积核线性滤波操作 API实例 原理 相关 线性滤波的是指就是相关&#xff0c;即计算图像中的每个部分和卷积核(kernel)的相关结果。 卷积核 卷积核本质上是一个固定大小的系数数组&#xff0c;数组中的某个元素被作为锚点&#xff08;一般是数组的中…

C++之从C过渡(上)

C之从C过渡 前言 暂时告别C语言&#xff0c;我们走进C。对于有C语言基础&#xff0c;初学C的我们来说&#xff0c;在正式学习C的主体内容之前&#xff0c;我们需要先有一个过渡&#xff0c;本文中会总结过渡需要了解的零散知识&#xff0c;主要是语法。 正文 C的第一个程序 …

终于用PC串口显示出esp32 串口输出hello world

硬件&#xff1a; esp32模块 rs232 转ttl 3.3v 电平转换器 3.3v 外接电源 esp32 tx 脚接转换器rx, rx脚接转换器tx esp32 使用uart2 现在就可以用pc作为上位机通过串口控制esp32&#xff0c;用pc串口调试软件作为esp的输出监控器显示esp的各种运算结果。 #include &qu…

使用visual studio2019创建dll导出自定义类

系列文章目录 文章目录 系列文章目录前言一、具体操作步骤1.创建动态链接库工程(DLL)2.头文件声明3.实现文件定义4.生成dll工程5 使用dll总结 前言 程序对动态链接库dll、静态链接库lib想必都很熟悉了&#xff0c;网上也有很多的相关介绍。但网上介绍的一般都是C语言函数介绍&…

javascript 的奇技巧淫二

文章目录 1 、标记模板文字2、使用 Object.entries() 和 Object.fromEntries()3、用于唯一元素的 Set 对象4、对象中的动态属性名称5、使用 bind() 进行函数柯里化6、使用 Array.from() 从类似数组的对象创建数组7、可迭代对象的 for…of 循环8、使用 Promise.all() 实现并发 P…

SpringBoot下载resources目录下的文件

1.引入SpringBoot和hutool依赖 <dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.22</version></dependency>2.在项目resources目录下放入模版文件&#xff0c;结构如下&#xff1a…

JavaScript基础(30)_事件的冒泡、事件的委派

事件的冒泡(Bubble) 所谓的冒泡指的是事件的向上传导&#xff0c;当后代元素上的事件被触发时&#xff0c;其祖先元素的“相同事件”也会被触发。 取消事件冒泡 在开发中大部分情况冒泡都是有用的&#xff0c;如果不希望发生事件冒泡可以通过事件对象来取消冒泡。取消冒泡代码…

数字货币走势分析两点最关键,比特币BTC竞猜策略共享

目前虚拟货币市场成为各界关注的焦点&#xff0c;比特币的未来也会随着相关的决策和政策而产生变化&#xff0c;多位专家是看好这个市场的潜力的。如果比特币随后可以得到更多开采和推广的话&#xff0c;全球加密货币领域的高度还会提升。目前各方对于比特币和加密货币咨询和了…

OpenAI降低人们的期望值 今年秋季的DevDay不会公布GPT-5

去年&#xff0c;OpenAI 在旧金山举行了一场声势浩大的新闻发布会&#xff0c;会上该公司发布了一系列新产品和工具&#xff0c;其中包括类似 App Store 的GPT 商店。不过&#xff0c;今年的活动将更加低调。本周一&#xff0c;OpenAI 表示它将改变 DevDay 大会的形式&#xff…

使用visual studio code远程连接虚拟机

1. 安装Remote-SSH插件 打开vscode&#xff0c;在“扩展商店”中搜索“Remote-SSH”&#xff0c;然后点击“安装”即可&#xff0c;如图所示。 2. 配置SSH 如图所示&#xff0c;点击“远程资源管理器”&#xff0c;点击“新建远程”&#xff0c;然后在输入框中输入如下指令。…

革新出行体验:音频定位导航系统引领智能导航新时代

在科技日新月异的今天&#xff0c;出行方式正经历着前所未有的变革。从传统的纸质地图到GPS视觉导航&#xff0c;再到如今日益兴起的音频定位导航系统&#xff0c;每一次进步都极大地提升了人们的出行便捷性与安全性。音频定位导航系统&#xff0c;作为智能导航领域的创新之作&…

css仿el-tabs标签页效果

需求&#xff1a;el-tabs很多时候需要改间距或者下划线上还要加组件什么的比较麻烦&#xff0c;手写一个自己根据需求更改即可 1.效果 2.主要代码详解 主要代码如下&#xff1a;active是下划线&#xff0c;activeitem是选中后改变字体颜色&#xff0c; item- (index 1),用ite…

用.net core简易搭建webapi托管到IIS

1、从官网下载.NET Core 托管捆绑包 https://learn.microsoft.com/zh-cn/aspnet/core/tutorials/publish-to-iis?viewaspnetcore-8.0&tabsvisual-studio 2、新建ASP.NET Core WEB API项目 新建控制器TestController并生成GetInfo方法 3、发布 目标路径选择 2)显示所有…

花小钱、办大事的巴黎奥运会,能学点啥?|易搭云

“获得奥运会举办权的竞争几乎和体育赛事本身一样激烈。”众所周知&#xff0c;奥运会不仅能带来巨大的经济效益&#xff0c;更是国家实力和文化底蕴的彰显。时隔百年&#xff0c;奥运会的主会场又回到了巴黎&#xff0c;以浪漫著称的巴黎&#xff0c;奥运会突出的关键词却变成…

使用Cisco进行模拟RIP路由协议配置

实验四 RIP路由协议配置 文章目录 实验四 RIP路由协议配置1.实验目的2.实验流程3.RIPv1实验步骤4.RIPv2实验步骤 1.实验目的 1&#xff09;理解RIP路由的原理 2&#xff09;掌握RIP路由的配置方法 2.实验流程 开始→布置拓扑→配置IP地址→配置并验证RIPv1→配置并验证RIPv2…

SQL-锁

一.锁的介绍 锁是计算机协调多个进程或线程并发访问一资源的机制。在数据中,除传统的计算资源(CPU,RAM,I/O)的争用以外,数据也是一种供许多用户共享的资源。如何保证数据并发访问的一致性,有效性是所有数据库必须解决的一个问题,锁冲突也是影响数据库并发访问性能的一个重要因…

[io]进程间通信 -信号概念、分类、工作原理

概念、工作原理&#xff1a; 信号是一种异步通信机制&#xff0c;用于在不同进程之间传递事件信息 信号的产生&#xff1a;包括对前台进程用户输入&#xff08;CtrlC&#xff09;、系统状态变化硬件异常&#xff08;如内存访问错误&#xff09;、终端系统调用&#xff08;kil…

【JVM基础13】——垃圾回收-详细聊一下G1垃圾回收器

目录 1- 引言&#xff1a;G1垃圾回收器2- ⭐核心&#xff1a;详解 G1 垃圾回收器2-1 概述G1垃圾回收器2-2 新生代垃圾回收 Young Collection第一次新生代垃圾回收第二次新生代垃圾回收 2-3 并发标记阶段 Young Collection Concurrent Mark2-4 Mixed Collection&#xff08;混合…