Desidero eseguire il ciclo tramite un file gpx e calcolare l'ascesa e la discesa totali. Ho una funzione che può calcolare la differenza di elevazione tra due serie di punti lat lunghi e ho impostato simplexml per leggere il ciclo & attraverso i punti trkseg del file gpx.PHP Looping attraverso una GPX per calcolare l'ascesa/discesa totale di una traccia
Il problema è che questo non è accurato (in realtà non è accurato in quanto è reale).
Queste due linee si tradurrà in diversi salita e discesa, in quanto è nella vita reale:
$total_ascent += ($val - $last_elevation);
$total_descent += ($val - $last_elevation);
C'è qualcuno che sa, come calcolare più accurata la salita e la discesa totale di un brano?
Questo è il mio attuale frammento di codice per calcolarlo ($track_elevations
è un array con aumenti di tutta la pista):
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;
}
}
Esempio di $track_elevations
array:
$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
)
In vero, ho stava andando in bicicletta sulla strada piana. Ma il mio frammento di codice calcolerà, sono salito e sceso a pochi metri. Forse dovrei aggiungere c'è qualche limitazione di precisione tra le due elevazioni di fila ...
Quello che voglio ottenere:
cercherò di spiegare più meglio - quando mi giro f.e. 20 km su strada piana (quasi senza salita e discesa), l'ascesa e la discesa totali dovrebbero essere vicino a 0. Ma quando somma $track_elevations
(come nel mio snippet di codice), otterrò in $total_ascent
e $total_descent
f.e. 500 metri ... E 'a causa di tra ogni elemento dell'array in $track_elevations
la differenza è di un paio di centimetri, ma sto ancora viaggiando sulla strada pianeggiante ... E nella somma totale si raccoglierà ad un gran numero di metri ... Spero ora è più chiaro.
puoi fornire alcuni valori di esempio per l'array 'track_elevations'? – Stephen
@Stephen aggiornato. – Legionar
Probabilmente ho frainteso la domanda, ma sembra che tu abbia risalito e disceso di un paio di metri (in base all'array fornito). Cosa vuoi calcolare esattamente? – Ynhockey