首页 > 编程问答 >如何使用 gpxpy 将元数据添加到 gpxfile

如何使用 gpxpy 将元数据添加到 gpxfile

时间:2024-07-22 07:03:49浏览次数:5  
标签:python gpx

我正在使用 gpxpy 从 gpx 文件中提取数据。数据示例:

<?xml version="1.0" encoding="UTF-8"?>
<gpx 
 xmlns="http://www.topografix.com/GPX/1/1" 
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
 xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd" 
 version="1.1" 
 creator="xyz3">
        <metadata>
                <name>Cubieres-St.Paul</name>
                <desc>Export from GpsPrune</desc>
        </metadata>
        <trk>
...
        </trk>
</gpx>

代码如下:

def gpxinfo(gpx): # gpx =: class gpxpy.gpx.GPX
    "extract from GPX-file"
    gpxname = "No gpxname"
    description = "No description"
    if gpx.name:
        gpxname = gpx.name
    if gpx.description:
        description = gpx.description
    return {'gpxname': gpxname,
            'description': description}

现在,我想为其他 gpx 文件缺少的部分添加 <metadata>..</metadata> 部分。

gpxpy 对我来说的问题是插入“名称” ' 和 'desc' 标记到 gpxpy 在解析文件时构建的内部数据结构中。 即使查看 gpxpy 源代码我也没有掌握。


你说的对, gpxpy 没有直接提供方法来添加 &lt;metadata&gt; 标签到一个空的 GPX 文件。不过,你可以通过操作 gpx.GPX 对象来实现这个目的。

以下是如何使用 gpxpy 添加 &lt;metadata&gt; 标签到 GPX 文件的步骤:

import gpxpy
import gpxpy.gpx

def add_metadata_to_gpx(gpx, name, description):
  """
  向 GPX 对象添加元数据

  Args:
    gpx: gpxpy.gpx.GPX 对象
    name: 元数据的名称
    description: 元数据的描述
  """
  # 如果 gpx.metadata 为 None,则创建一个新的 gpxpy.gpx.GPXMetadata 对象
  if gpx.metadata is None:
    gpx.metadata = gpxpy.gpx.GPXMetadata()

  # 设置名称和描述
  gpx.metadata.name = name
  gpx.metadata.description = description

# 示例用法
gpx = gpxpy.gpx.GPX()  # 创建一个空的 GPX 对象

# 添加元数据
add_metadata_to_gpx(gpx, "我的 GPX 文件", "这是一个示例 GPX 文件")

# ... 添加其他 GPX 数据,如航点、路径、轨迹等

# 将 GPX 数据写入文件
with open('output.gpx', 'w') as f:
  f.write(gpx.to_xml())

这段代码首先检查 gpx.metadata 是否为 None。如果是,则创建一个新的 gpxpy.gpx.GPXMetadata 对象并将其赋值给 gpx.metadata 。 然后,它设置 gpx.metadata 对象的 name description 属性。

最后,将修改后的 gpx 对象使用 to_xml() 方法转换为 XML 字符串,并写入到文件中。

注意:
* 如果你已经有一个包含数据的 GPX 文件,可以使用 gpxpy.parse() 函数解析它,并将返回的 gpxpy.gpx.GPX 对象传递给 add_metadata_to_gpx() 函数。 * 除了 name description 之外,你还可以使用 gpxpy.gpx.GPXMetadata 对象添加其他元数据,例如作者、关键字、链接等等。

标签:python,gpx
From: 78775290

相关文章

  • 一个简单的问题(python、串行通信和arduinos)
    只是一个关于小脚本的快速问题,由于某种原因无法工作我运行了这个脚本:importserialimporttimeimportturtledefserialreading():serialPort=serial.Serial(port="COM5",baudrate=9600,bytesize=8,timeout=2,stopbits=serial.STOPBITS_ONE......
  • 我在 Windows 10 上运行 Python 代码后控制台立​​即关闭
    虽然我在代码末尾使用input(),但在Windows10(IDLE之外)的窗口中输入名称后,控制台仍然立即关闭,并且我看不到结果。我该怎么做才能阻止控制台关闭?#!python3name=input('Enteryourname:')print('Hello'+name)input('pressEntertoexit:')你在代码末尾......
  • 具有未定义嵌套列表深度的嵌套列表的Python注释类型
    [[1,2,3],3,[2,4],5]的类型是list[list[int]|int]但是,如果嵌套列表具有未定义的深度,例如[[[1,2]],2,[1,[3,[3]]]],3,[2,[2]]],那么它会具有什么类型?可以使用递归类型提示来表示任意深度嵌套的列表:fromtypingimportList,Union......
  • 在Spyder(Python 3.6)中导入cv2时出现导入错误
    我已经在Windows操作系统中安装了opencv3.0.0。我已运行该应用程序并已成功将其安装在C:\驱动器中,并且还将cv2.pyd文件复制到C:\Python27\Lib\site-packages中,正如我在几个教程视频中看到的那样在我的Python2.7.5Shell中,即当我键入>>>i......
  • Python + VS Code 调试器:可视化我的程序当前正在执行的源代码中的位置?
    当我使用VSCodePython调试器时:我可以执行我的程序,以便编辑器将我逐行带到源代码中的任何位置(跳转到相关文件/如果尚未打开则将其打开)目前的执行情况是?是的,VSCode的Python调试器可以让你逐行执行代码,并实时显示当前执行的位置。以下是操作方法:1.设置断点:......
  • 如何立即取消使用 Ollama Python 库生成答案的 Asyncio 任务?
    我正在使用Ollama通过OllamaPythonAPI从大型语言模型(LLM)生成答案。我想通过单击停止按钮取消响应生成。问题在于,只有当响应生成已经开始打印时,任务取消才会起作用。如果任务仍在处理并准备打印,则取消不起作用,并且无论如何都会打印响应。更具体地说,即使单击按钮后,此函数......
  • 使用 np.array 索引过滤 Python 列表
    谁能向我解释一下列表self.data如何使用numpy索引数组selec_idx进行索引/过滤?完整的课程可在https://github.com/kaidic/LDAM-DRW/blob/master/imbalance_cifar.pydefgen_imbalanced_data(self,img_num_per_cls):new_data=[]n......
  • 尝试在cmd(python)中安装turtle
    当我在cmd中编写pipinstallturtle后,这条消息出现在我面前。有人知道该怎么办吗?C:\>pipinstallturtleCollectingturtleUsingcachedturtle-0.0.2.tar.gz(11kB)ERROR:Commanderroredoutwithexitstatus1:command:'C:\Users\Bruger\App......
  • Python + Polars:如何有效地“fill_null”仅 DataFrame 的某些列?
    例如,假设我只想fill_null(strategy="zero")DataFrame的数字列。我当前的策略是这样做:final_df=df.select(cs.exclude(cs.numeric()))final_df.with_columns(df.select(cs.numeric()).fill_null(strategy="zero"))是否有替代的、更惯用或更有效的方法来实现我......
  • 如何找到 Windows 上 Python 的安装位置?
    我想找出我的Python在Windows上的安装路径。例如:C:\Python25如何找到Python的安装位置?在Windows上查找Python安装位置的方法有很多种:1.使用where命令(推荐方法):打开命令提示符(cmd)。输入以下命令并按回车键:wherepython......