2015-01-24 4 views
1

루프를 gpx 파일로 보내고 총 거리를 계산하고 싶습니다. 나는 위의 긴 점 두 세트 사이의 거리를 계산할 수있는 함수를 가지고 있으며, gpx 파일 trkseg를 통해 & 루프를 읽는 simplexml을 설정했다.PHP GPX를 반복하여 트랙의 총 거리를 계산합니다.

나는 두 세트의 lat long 값을 총 거리 var에 추가 한 다음 다음 값 세트로 루프하는 다음 단계로 넘어 가기 위해 정말 고심하고있다. 누군가가 PHP로 올바른 방향으로 나를 가리킬 수 있습니까?

<?php 
// Funcntion for calculating distance between to sets of lat/long points 

function distance($lat1, $lon1, $lat2, $lon2, $unit) { 

    $theta = $lon1 - $lon2; 
    $dist = sin(deg2rad($lat1)) * sin(deg2rad($lat2)) + cos(deg2rad($lat1)) * cos(deg2rad($lat2)) * cos(deg2rad($theta)); 
    $dist = acos($dist); 
    $dist = rad2deg($dist); 
    $miles = $dist * 60 * 1.1515; 
    $unit = strtoupper($unit); 

    if ($unit == "K") { 
    return ($miles * 1.609344); 
    } else if ($unit == "N") { 
    return ($miles * 0.8684); 
} else { 
    return $miles; 
    } 
} 



// Read GPX file, find track lat/lon attributes and loop 

$xml=simplexml_load_file("mygpxfile.gpx"); 

echo $xml->trk->name; 
echo "<br>"; 

foreach($xml->trk->trkseg->{'trkpt'} as $trkpt) { 

    $trkptlat = $trkpt->attributes()->lat; 
    $trkptlon = $trkpt->attributes()->lon; 
    } 

// How do I use the function above to now loop through all the values to calc total distance? 

// $total_distance = distance($lat1, $lon1, $lat2, $lon2, $unit) 


?> 

답변

2

이 질문에 대한 답변은 있습니까?

<? 
$last_lat = false; 
$last_lon = false; 
$total_distance = 0; 
foreach($xml->trk->trkseg->{'trkpt'} as $trkpt) { 
    $trkptlat = $trkpt->attributes()->lat; 
    $trkptlon = $trkpt->attributes()->lon; 
    if($last_lat){ 
     $total_distance+=distance($trkptlat, $trkptlon, $last_lat, $last_lon, 'k'); 
    } 
    $last_lat = $trkptlat; 
    $last_lon = $trkptlon; 
} 
echo $total_distance; 
?> 
+0

감사합니다. 어떻게 작동하는지 확인할 수 있습니다. 나는 경고를 받는다 : 경고 : deg2rad()는 매개 변수 1이 double 일 것으로 기대한다. xml.php의 24 행에 주어진 객체 Line 24 : $ dist = sin (deg2rad ($ lat1)) * sin (deg2rad ($ lat1) cos (deg2rad ($ lat1)) * cos (deg2rad ($ lat2)) * cos (deg2rad ($ theta)); 변수 유형을 설정하는 것과 관련이 있습니까? – user1819574

관련 문제