From 054c05b7a0c04a4c258efde7d28f8eb7b248f815 Mon Sep 17 00:00:00 2001 From: Krivchikov Dmitry Date: Thu, 2 Jun 2016 12:26:19 +0300 Subject: [PATCH] =?UTF-8?q?ADD=20=D1=83=D1=82=D0=BE=D1=87=D0=BD=D1=91?= =?UTF-8?q?=D0=BD=D0=BD=D1=8B=D0=B9=20=D1=80=D0=B0=D1=81=D1=81=D1=87=D1=91?= =?UTF-8?q?=D1=82=20=D0=B4=D0=BB=D0=B8=D0=BD=D1=8B=20=D1=82=D1=80=D0=B5?= =?UTF-8?q?=D0=BA=D0=B0;=20=D1=8D=D0=BA=D1=81=D0=BF=D0=BE=D1=80=D1=82=20?= =?UTF-8?q?=D1=82=D1=80=D0=B5=D0=BA=D0=B0=20=D0=B2=20GPX?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- classes/Geo.php | 11 ++++++- controllers/JsonController.php | 2 +- controllers/TracksController.php | 24 +++++++++++++-- views/tracks/gpx.php | 51 ++++++++++++++++++++++++++++++++ views/tracks/index.php | 3 ++ 5 files changed, 87 insertions(+), 4 deletions(-) create mode 100644 views/tracks/gpx.php diff --git a/classes/Geo.php b/classes/Geo.php index 7967b98..6ef7d9a 100644 --- a/classes/Geo.php +++ b/classes/Geo.php @@ -16,7 +16,16 @@ class Geo $delta_lat = ($lat2 - $lat1); $delta_lng = ($lng2 - $lng1); - return (6378137 * acos(cos($lat1) * cos($lat2) * cos($lng1 - $lng2) + sin($lat1) * sin($lat2))); + $distance = (6378137 * acos(cos($lat1) * cos($lat2) * cos($lng1 - $lng2) + sin($lat1) * sin($lat2))); + + if (isset($latlng1['alt']) && isset($latlng2['alt']) && $latlng1['alt'] <> $latlng2['alt']) { +// var_dump($distance, abs($latlng1['alt'] - $latlng2['alt'])); + $altDelta = abs($latlng1['alt'] - $latlng2['alt']); + $distance = sqrt(pow($distance, 2) + pow($altDelta, 2)); +// var_dump($distance);die; + } + + return $distance; } static function formatedDistance($distance) diff --git a/controllers/JsonController.php b/controllers/JsonController.php index 1def25c..b14c698 100644 --- a/controllers/JsonController.php +++ b/controllers/JsonController.php @@ -625,7 +625,7 @@ class JsonController extends Controller if ($tracks) { foreach ($tracks as $track) { $resLatlngs = array(); - $trackPoints = TrackPoints::model()->getAll(array('where' => '`trackId` = ?'), array($track->id)); + $trackPoints = TrackPoints::model()->getAll(array('where' => '`trackId` = ?', 'order'=>'id'), array($track->id)); if ($trackPoints) { foreach ($trackPoints as $trackPoint) { $resLatlngs[] = array( diff --git a/controllers/TracksController.php b/controllers/TracksController.php index 63bafd6..1bdbec4 100644 --- a/controllers/TracksController.php +++ b/controllers/TracksController.php @@ -108,6 +108,22 @@ class TracksController extends Controller )); } + function actionExport() + { + $id = intval(App::getParam('id')); + $trip = Trips::model()->getByPK($id); + + if ($trip->isEmpty() || $trip->owner != App::$user->id) { + App::error404(); + } + + self::renderPartial('/tracks/gpx.php', array( + 'trip' => $trip, + 'waypoints' => WayPoints::model()->getAll(array('where' => '`tripId` = ?'), array($trip->id)), + 'tracks' => Tracks::model()->getAll(array('where' => '`tripId` = ?'), array($trip->id)), + )); + } + function actionImport() { $id = (int) App::getParam('id'); @@ -206,25 +222,29 @@ class TracksController extends Controller foreach ($trkpt as $tpt) { $speed = isset($tpt->extensions->geotrackerMeta['s']) ? floatval($tpt->extensions->geotrackerMeta['s']) : 0; + $alt = isset($tpt->ele) ? floatval($tpt->ele) : 0; $trackPoint = TrackPoints::model()->add( array( 'trackId' => $track->id, 'lat' => floatval($tpt['lat']), 'lng' => floatval($tpt['lon']), - 'alt' => isset($tpt->ele) ? floatval($tpt->ele) : 0, + 'alt' => $alt, 'createdAt' => isset($tpt->time) ? $tpt->time : date('c'), 'speed' => $speed, ) ); if ($prevPoint) { - $distanceTmp += Geo::distance($prevPoint, array('lat' => floatval($tpt['lat']), 'lng' => floatval($tpt['lon']))); + $distanceTmp += Geo::distance($prevPoint, array('lat' => floatval($tpt['lat']), 'lng' => floatval($tpt['lon']), 'alt' => $alt)); } $prevPoint = array( 'lat' => floatval($tpt['lat']), 'lng' => floatval($tpt['lon']), ); + if (isset($tpt->ele)) { + $prevPoint['alt'] = floatval($tpt->ele); + } $tptCount++; } diff --git a/views/tracks/gpx.php b/views/tracks/gpx.php new file mode 100644 index 0000000..955be1f --- /dev/null +++ b/views/tracks/gpx.php @@ -0,0 +1,51 @@ + + + + name ?> + description ?> + + + + nick ?> + + + + + + + alt ?> + + name ?> + description ?> + + + + + + name ?> + + + distance ?> + createdAt ?> + + + +getAll(array('where' => '`trackId` = ?', 'order'=>'id'), array($track->id)); ?> + + + + alt ?> + + + + + + + + + + + \ No newline at end of file diff --git a/views/tracks/index.php b/views/tracks/index.php index 56194c4..8f3b3ea 100644 --- a/views/tracks/index.php +++ b/views/tracks/index.php @@ -25,6 +25,9 @@ if ($trips) { + + + id ?> — name ?> (createdAt ?>) status == Trips::STATUS_PUBLIC):?>