Autor | Zpráva | ||
---|---|---|---|
mackopu Profil |
Používám následující fci pro parsování obsahu GPX souboru:
<?php function distance($lat1, $lng1, $lat2, $lng2, $miles = true) { $pi80 = M_PI / 180; $lat1 *= $pi80; $lng1 *= $pi80; $lat2 *= $pi80; $lng2 *= $pi80; $r = 6372.797; // mean radius of Earth in km $dlat = $lat2 - $lat1; $dlng = $lng2 - $lng1; $a = sin($dlat / 2) * sin($dlat / 2) + cos($lat1) * cos($lat2) * sin($dlng / 2) * sin($dlng / 2); $c = 2 * atan2(sqrt($a), sqrt(1 - $a)); $km = $r * $c; return ($miles ? ($km * 0.621371192) : $km); } $xml = new simplexmlelement('<?xml version="1.0" encoding="UTF-8"?> <gpx version="1.0" creator="mackopu http://www.ambike.com" xmlns="http://www.topografix.com/GPX/1/0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.topografix.com/GPX/1/0 http://www.topografix.com/GPX/1/0/gpx.xsd"> <trk> <trkseg> <trkpt lat="50.229394" lon="12.871549"> <ele>386</ele> </trkpt> <trkpt lat="50.229475" lon="12.871034"> <ele>386</ele> </trkpt> <trkpt lat="50.229231" lon="12.869741"> <ele>387</ele> </trkpt> <trkpt lat="50.229167" lon="12.869445"> <ele>388</ele> </trkpt> <trkpt lat="50.228957" lon="12.869304"> <ele>389</ele> </trkpt> </trkseg> </trk> </gpx>'); foreach ($xml->trk->trkseg->trkpt as $uzel) { $eles[] = $uzel->ele; $lats[] = $uzel['lat']; $lons[] = $uzel['lon']; } for($i=0; $i<count($lats); $i++) { if($i==0) { $distances[] = 0; } else { $distances[] = distance($lats[$i-1], $lons[$i-1], $lats[$i], $lons[$i], false); } } $total_distances = 0; for($i=0; $i<count($distances); $i++) { $total_distances += $distances[$i]; echo $distances[$i]."; ".$total_distances."; ".$eles[$i]."<br>"; } ?> Pokud ale zadám natvrdo: $distances[] = distance(50.229394, 12.871549, 50.229475, 12.871034, false); $distances[] = distance(50.229475, 12.871034, 50.229231, 12.869741, false); $distances[] = distance(50.229231, 12.869741, 50.229167, 12.869445, false); $distances[] = distance(50.229167, 12.869445, 50.228957, 12.869304, false); $distances[] = distance(50.228957, 12.869304, 50.228296, 12.864153, false); |
||
nightfish_ Profil * |
#2 · Zasláno: 29. 1. 2012, 17:47:20
$lats[] = (float)$uzel['lat']; $lons[] = (float)$uzel['lon']; |
||
mackopu Profil |
Neuvěřitelné!
Tohle vůbec neznám! Zkoušel jsem to s intval(), ale nezabralo to... Už to fachčí :-) Díky moc! |
||
Alphard Profil |
#4 · Zasláno: 29. 1. 2012, 18:57:30
mackopu:
„Zkoušel jsem to s intval()“ A so myslíte, že dělá? Parsuje na integer, což je u gps dost nepřesné. Podobně existuje floatval(), jen vybrat tu správnou funkci. |
||
Časová prodleva: 11 let
|
0