<?php



	function getPoints($gpxPath,$gpxOffset = 10)

	{

		$points = array();



		$dist=0;

		

		$lastLat=0;

		$lastLon=0;

		$lastEle=0;

		$lastOffset=0;

			

		//Default Offset = 10 mt

		if (!($gpxOffset > 0))

		{

			$gpxOffset = 10;

		}

		

		$realGpxPath = substr (__FILE__, 0, strrpos(__FILE__,'/wp-content/')).$gpxPath;

		

		if (file_exists($realGpxPath))

		{

			

			$gpx = simplexml_load_file($realGpxPath);	

			$gpx->registerXPathNamespace('10', 'http://www.topografix.com/GPX/1/0'); 

			$gpx->registerXPathNamespace('11', 'http://www.topografix.com/GPX/1/1'); 

			

			foreach($gpx->xpath('//trkpt | //10:trkpt | //11:trkpt') as $trkpt){ 

				$lat = $trkpt['lat'];

				$lon = $trkpt['lon'];

				$ele = $trkpt->ele;

				if ($lastLat == 0 && $lastLon == 0)

				{

					//Base Case

					array_push($points, array((float)$lat,(float)$lon,(float)round($ele,1),(float)round($dist,1)));

					$lastLat=$lat;

					$lastLon=$lon;

					$lastEle=$ele;				

				}

				else

				{

					//Normal Case

					$offset = calculateDistance($lat, $lon, $ele,$lastLat, $lastLon, $lastEle);

					$dist = $dist + $offset;

					if (((float) $offset + (float) $lastOffset) > $gpxOffset)

					{

						//Bigger Offset -> write coordinate

						$lastOffset=0;

						array_push($points, array((float)$lat,(float)$lon,(float)round($ele,1),(float)round($dist,1)));

					}

					else

					{

						//Smoller Offset -> continue..

						$lastOffset= (float) $lastOffset + (float) $offset ;

					}

				}

				$lastLat=$lat;

				$lastLon=$lon;

				$lastEle=$ele;

			}

		}

		else

		{

			array_push($points, array((float)0,(float)0,(float)0,(float)0));

		}



		// riduco l'array a circa 200 punti per non appensantire la pagina(mappa e grafico)!

		$count=sizeof($points);

		if ($count>200)

		{

			$f = round($count/200);

			if ($f>1)

				for($i=$count;$i>0;$i--)

					if ($i % $f != 0)

						unset($points[$i]);

		}

		return $points;

	}

	

	function toRadians($degrees)

	{

		return $degrees * 3.1415926535897932385 / 180;

	}	

	

	function calculateDistance($lat1,$lon1,$ele1,$lat2,$lon2,$ele2)

	{

		//Distance in meters

		$dLat = toRadians((float) $lat2 - (float) $lat1);

		$dLng = toRadians((float) $lon2 - (float) $lon1);

		$a = (float) ( sin($dLat / 2) * sin($dLat / 2)) +  (float) ( cos( toRadians($lat1)) * cos( toRadians($lat2)) * sin($dLng / 2) * sin($dLng / 2) );

		$dist = 2 * 3958.75 * atan2(sqrt($a), sqrt(1 - (float) $a));

		return sqrt(pow($dist * 1609.00, 2) + pow((float) $lat1 - (float)$lat2, 2));	

	}



?>