GPX 解析。计算速度。蟒蛇

问题描述 投票:0回答:2

我正在尝试分析 GPS 收集数据的每个点的速度。我正在使用 gpxpy,我已经从 gpx 文件中打印出一些内容,例如最大速度、开始和结束时间、移动时间等,但我不知道如何打印速度、纬度、经度等每一点。我的 gpx 文件有 462 个点,我想了解每个点的更多信息。我的代码如下:

def print_gpx_part_info(gpx_part, indentation='    '):
"""
gpx_part may be a track or segment.
"""
length_2d = gpx_part.length_2d()
length_3d = gpx_part.length_3d()

moving_time, stopped_time, moving_distance, stopped_distance, max_speed = gpx_part.get_moving_data()
print('%sTotal Moving time: (hr/min/sec) %s' % (indentation, format_time(moving_time)))
#print('%sStopped distance: %sm' % stopped_distance)
#print('%sMax speed: %sm/s = %skph' % (indentation, max_speed, max_speed * 60. ** 2 / 1000. if max_speed else 0))
print('%sMax speed: %smph' % (indentation,  max_speed * 2.3694 if max_speed else 0))

start_time, end_time = gpx_part.get_time_bounds()
print('%sStarted: %s' % (indentation, start_time))
print('%sEnded: %s' % (indentation, end_time))

points_no = len(list(gpx_part.walk(only_points=True)))
print('%sPoints: %s' % (indentation, points_no))

print('')

def print_gpx_info(gpx):
print('File: %s' % gpx_file)

if gpx.name: 
    print('  GPX name: %s' % gpx.name)
if gpx.description:
    print('  GPX description: %s' % gpx.description)

print_gpx_part_info(gpx)

for track_no, track in enumerate(gpx.tracks):
    for segment_no, segment in enumerate(track.segments):
        print '    Track #%s, Segment #%s' % (track_no, segment_no)
        print_gpx_part_info(segment, indentation='        ')

如有任何建议,我们将不胜感激。预先感谢您。

python xml gps gpx
2个回答
6
投票

GPXTrackPoint 类有一个方法 speed_ Between(another_gpx_track_point)。只需迭代所有点并为相邻点调用此函数即可。

GPX文件格式还允许将速度直接保存在GPX点中。如果您的赛道属于这种情况,则无需使用 speed_ Between() 进行计算...只需使用 gpx_track_point.speed 属性即可。

我是从头开始写的(忽略拼写错误:),但这或多或少是代码:

for track in gpx.tracks:
  for segment in track.segments:
    for point_no, point in enumerate(segment.points):
      if point.speed != None:
        print "Speed=", point.speed
      elif point_no > 0:
        printf "Calculated speed=", point.speed_between(segment.points[point_no - 1])

顺便说一句,您可以计算当前点与上一个点之间的速度以及当前点与下一个点之间的速度,然后对这些值进行平均以获得更好的速度。


0
投票
segment.get_speed(point_ind)
 给出的结果与使用 

计算上一个点和下一个点之间的速度的平均值相同

point.speed_between(point_ind)
哪个谜题建议。我觉得前者更简洁。

© www.soinside.com 2019 - 2024. All rights reserved.