Я хочу зациклить файл gpx и рассчитать общий подъем и спуск. У меня есть функция, которая может вычислить разницу в высоте между двумя наборами длинных точек, и я настроил simplexml для чтения и цикла через точки trkseg файла gpx.
Проблема в том, что это не точно (на самом деле не точно, как на самом деле).
Эти две линии приведут к разным подъемам и спускам, как и в реальной жизни:
$total_ascent += ($val - $last_elevation);
$total_descent += ($val - $last_elevation);
Кто-нибудь знает, как поточнее рассчитать общий подъем и спуск трека?
Это мой текущий фрагмент кода для его вычисления ($track_elevations
— это массив с высотами всего трека):
if (!empty($track_elevations)) {
$total_ascent = $total_descent = 0
$lowest_elevation = $highest_elevation = $last_elevation = null;
foreach ($track_elevations as &$val) {
if (!is_null($last_elevation)) {
if ($last_elevation < $val) {
$total_ascent += ($val - $last_elevation);
}
elseif ($last_elevation > $val) {
$total_descent += ($last_elevation - $val);
}
}
if (is_null($lowest_elevation) or $lowest_elevation > $val) {
$lowest_elevation = $val;
}
if (is_null($highest_elevation) or $highest_elevation < $val) {
$highest_elevation = $val;
}
$last_elevation = $val;
}
}
Пример массива $track_elevations
:
$track_elevations = array(
327.46,
328.27,
329.32,
330.11,
329.46,
329.39,
329.68,
331.04,
333.23,
333.46,
332.97,
332.88,
332.99,
332.75,
332.74,
334.01,
333.62
)
На самом деле я ехал на велосипеде по ровной дороге. Но мой фрагмент кода рассчитает, я поднялся и спустился на пару метров. Может быть, я должен добавить туда какое-то ограничение точности между двумя высотами подряд...
Чего я хочу достичь:
Я постараюсь объяснить это подробнее - когда я еду на ф.е. 20 км по ровной дороге (почти без подъемов и спусков), сумма подъемов и спусков должна быть близка к 0. Но когда я суммирую $track_elevations
(как в моем фрагменте кода), я получаю $total_ascent
и $total_descent
т.е. 500 метров... Это из-за того, что между каждым элементом массива в $track_elevations
есть разница в пару сантиметров, а я пока еду по ровной дороге... И в сумме соберется на большое количество метров... Надеюсь теперь это более понятно.
track_elevations
? - person Stephen   schedule 26.05.2015$track_elevations
(как в моем фрагменте кода), я получаю$total_ascent
и$total_descent
т.е. 500 метров... Это из-за того, что между каждым элементом массива в$track_elevations
есть разница в пару сантиметров, а я пока еду по ровной дороге... И в сумме соберется на большое количество метров... Надеюсь теперь это более понятно. - person Legionar   schedule 26.05.2015