You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用OSGeo OGR复制GPX文件时丢失属性信息且要素数量翻倍的问题求助

OSGeo OGR复制GPX文件时丢失属性信息且要素数量翻倍的问题求助

我现在用OSGeo的OGR库处理GPX文件,本来想做个最基础的测试——把in.gpx里的所有图层完整复制到out.gpx里,但遇到了两个奇怪的问题:一是输出的track_points要素数量翻倍了,二是原本的ele(海拔)和time(时间)属性都丢失了。

以下是我用的测试代码:

from osgeo import ogr, osr, gdal

in_file = "in.gpx"
out_file = "out.gpx"

in_ds = ogr.Open(in_file)
out_ds = ogr.GetDriverByName("GPX").CreateDataSource(out_file)

for in_layer in in_ds:
    in_layer_defn = in_layer.GetLayerDefn()
    out_layer = out_ds.CreateLayer(in_layer.GetName(), in_layer.GetSpatialRef(), in_layer_defn.GetGeomType())
    for feature in in_layer:
        out_layer.CreateFeature(feature)

我用ogrinfo -al分别查看了输入和输出文件的内容,结果如下:

输入文件(in.gpx)的关键输出片段:

...
Layer name: track_points
Geometry: Point
Feature Count: 17
...
OGRFeature(track_points):0
  track_fid (Integer) = 0
  track_seg_id (Integer) = 0
  track_seg_point_id (Integer) = 0
  ele (Real) = 93.18
  time (DateTime) = 2024/03/20 15:44:02.856+00
  POINT (-8.617004 41.1505952)

输出文件(out.gpx)的关键输出片段:

...
Layer name: track_points
Geometry: Point
Feature Count: 34 #### 要素数量翻倍了!
...
OGRFeature(track_points):0
  track_fid (Integer) = 0
  track_seg_id (Integer) = 0
  track_seg_point_id (Integer) = 0
  POINT (-8.617004 41.1505952) #### 丢失了ele和time字段!

我反复检查了代码逻辑,觉得就是简单的遍历图层和要素然后创建,完全没搞懂为什么会出现这两个问题。有没有大佬能帮忙分析下原因,以及给出修复方案,让复制后的GPX文件和原文件保持完全一致?

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.08 11:10:29