2013-12-01 4 views
1

Я пытаюсь проанализировать скорость каждой собранной GPS-информации. Я использую gpxpy, и я получил возможность распечатывать несколько файлов, таких как максимальная скорость, время начала и окончания, время перемещения и т. Д. Из файла gpx, но я не знаю, как печатать скорость, lat, long и т. Д. Для каждый пункт. У файла gpx у меня есть 462 пункта, и я хотел бы узнать больше о каждой точке. Код, который у меня есть:Анализ GPX. Вычислить скорость. Python

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='  ') 

Любые предложения были бы весьма полезными. Заранее спасибо.

ответ

5

Класс 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]) 

Кстати, вы можете рассчитать скорость между текущей точкой и предыдущей и текущая точка и следующая, а затем средние значения, чтобы иметь лучшую скорость.

Смежные вопросы