我试图分析GPS收集数据的每一点的速度.我正在使用gpxpy,我已经从gpx文件中打印出一些内容,如最大速度,开始和结束时间,移动时间等,但我不知道如何打印速度,lat,long等等每一点.我拥有的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=' ')
任何建议将不胜感激.先感谢您.
GPXTrackPoint类有一个方法speed_between(another_gpx_track_point).只需迭代所有点并为邻近点调用此函数.
GPX文件格式还允许将速度直接保存在GPX点中.如果您的轨道就是这种情况,则无需使用speed_between()计算...只需使用gpx_track_point.speed属性即可.
我是从头开始写这个(忽略typoos :),但这或多或少是代码:
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])
顺便说一句,你可以计算出当前点和前一个的速度和当前点和下一个,然后平均这些值有一个更好的速度.