gpt4 book ai didi

PHP循环通过GPX来计算轨道的总上升/下降

转载 作者:可可西里 更新时间:2023-11-01 12:38:09 32 4
gpt4 key购买 nike

我想循环遍历 gpx 文件并计算总上升和下降。我有一个函数可以计算两组经纬度点之间的高程差异,我已经设置了 simplexml 来读取和循环遍历 gpx 文件 trkseg 点。

问题是,这不准确(实际上并不准确)。

这两条线将导致不同的上升和下降,就像在现实生活中一样:

$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 中500米...因为$track_elevations中的每个数组元素之间相差几厘米,但我仍然骑在平坦的道路上...并且在总和中它会聚集成一个大米数...希望现在更清楚了。

最佳答案

问题是,如果您为 ascentet 计算 $lastHeight - $track_elevations[$i],您会得到低于 0 的值,这就是为什么您在 $total_asc$total_desc

<?php
$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
);

$lastHeight = $track_elevations[0];
$total_ascent = 0;
$total_descent = 0;
for ($i=1;$i<count($track_elevations);$i++) {
if ($track_elevations[$i] > $lastHeight) {
$total_ascent += -1 * ($lastHeight - $track_elevations[$i]);
}
else {
$total_descent += ($lastHeight - $track_elevations[$i]);
}
$lastHeight = $track_elevations[$i];
}
echo $total_ascent ."\n";
echo $total_descent . "\n\n--\n";
echo $total_ascent - $total_descent . "\n";

--

$ php -f gpx.php
8.1
1.94

--
6.16

--手动计算值:

Ascent:
0.81
1.05
0.79
0.29
1.36
2.19
0.23
0.11
1.27
---
8.1

Descent:
0.65
0.07
0.49
0.09
0.24
0.01
0.39
---
1.94

关于PHP循环通过GPX来计算轨道的总上升/下降,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30369168/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com