Я хочу, чтобы петля, хотя gpx-файл, и вычислил общее восхождение и спуск. У меня есть функция, которая может вычислять разницу в высоте между двумя наборами длинных точек lat, и я установил simplexml для чтения цикла & через точки trkseg файла gpx.PHP Цитирование через 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
)
В реале я ездил на велосипеде по ровной дороге. Но мой фрагмент кода рассчитан, я поднялся и спустился на пару метров. Может быть, я должен добавить туда некоторые ограничения точности между двумя высотами подряд ...
То, что я хочу добиться:
Я попытаюсь объяснить это более лучше - когда я еду F.E. 20 км по ровной дороге (почти без подъема и спуска), общее восхождение и спуск должны быть близки к 0. Но когда я суммирую $track_elevations
(как в моем фрагменте кода), я получу $total_ascent
и $total_descent
f.e. 500 метров ... Из-за того, что между каждым элементом массива в $track_elevations
есть разница в сантиметрах, но я все еще еду по плоской дороге ... И в общей сумме он будет собираться на большое количество метров ... Надеюсь сейчас это более понятно.
Вы можете указать некоторые значения для массива 'track_elevations'? – Stephen
@Stephen обновлен. – Legionar
Я, вероятно, неправильно понял вопрос, но похоже, что вы поднялись и спустились на пару метров (на основе массива). Что именно вы хотите рассчитать? – Ynhockey