我正在使用 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
没有直接提供方法来添加
<metadata>
标签到一个空的 GPX 文件。不过,你可以通过操作
gpx.GPX
对象来实现这个目的。
以下是如何使用
gpxpy
添加
<metadata>
标签到 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
对象添加其他元数据,例如作者、关键字、链接等等。