<?php
$FILE = "test.gpx";
//$metriPerLat = 111133.35292; // 60.00721 miglia nautiche
function CalcolaDistanza($lat1, $lon1, $alt1, $lat2, $lon2, $alt2) {
// Costanti
$metriPerLon = 111319.88636; // 60.10793 miglia nautiche
$metriPerLat = 111133.35292; // 60.00721 miglia nautiche
$rad = pi() / 180.0;
$xDistance = (cos($lat1 * $rad) + cos($lat2 * $rad)) * ($lon2 - $lon1) * ($metriPerLon / 2);
$yDistance = ($lat2 - $lat1) * $metriPerLat;
$vDistance = ($alt2 - $alt1); // espressa in metri
// le distanze vanno calcolate come valori assoluti
// secondo me (davide) inutile, ne fai il quadrato
if ( $xDistance < 0) $xDistance = $xDistance * -1;
if ( $yDistance < 0) $yDistance = $yDistance * -1;
if ( $vDistance < 0) $vDistance = $vDistance * -1;
// $Distanza_piana = sqrt( pow($yDistance, 2) + pow($xDistance, 2) );
// $Distanza = sqrt( pow($Distanza_piana, 2) + pow($vDistance, 2) );
$Distanza = sqrt(pow($yDistance, 2) + pow($xDistance, 2) + pow($vDistance, 2) );
return $Distanza;
}
if (file_exists($FILE)) {
$xml = simplexml_load_file($FILE);
$lat_pre=0;
$distanza_totale = 0;
foreach( $xml->children() AS $child ) {
$name = $child->getName();
if ($name == 'trk') {
foreach( $child->children() AS $grandchild ) {
$grandname = $grandchild->getName();
if ($grandname == 'name') {
printf ("<h2>ROUTE NAME: %s</h2>", $grandchild);
}
if ($grandname == 'trkseg') {
foreach( $grandchild->children() AS $greatgrandchild ) {
$greatgrandname = $greatgrandchild->getName();
printf("%s - ", $greatgrandname);
if ($greatgrandname == 'trkpt') {
$lat=(float)$greatgrandchild['lat'];
$lon=(float)$greatgrandchild['lon'];
printf("LAT: %s - LON: %s - ", $lat, $lon);
/*
foreach( $greatgrandchild->children() AS $elegreatgrandchild ) {
printf ("%s: %s - ", $elegreatgrandchild->getName(), $elegreatgrandchild);
}
*/
}
if ($greatgrandname == 'ele') {
$alt=$greatgrandchild;
print_r("ELE: %s", $alt);
}
if ( $lat_pre != 0 ) $DIST=CalcolaDistanza ($lat_pre, $lon_pre, $alt_pre, $lat, $lon, $alt);
printf ("DIST: %s<br>\n", $DIST);
$distanza_totale = $distanza_totale + $DIST ;
$lat_pre=$lat;
$lon_pre=$lon;
$alt_pre=$alt;
printf ( "\n Distanza totale: %s<br>\n", $distanza_totale);
}
}
}
}
}
} else {
exit('Failed to open file');
}
?>