ADD рассчёт длины трека при импорте

This commit is contained in:
Krivchikov Dmitry 2016-05-17 20:27:22 +03:00
parent e714778062
commit 801413690b
1 changed files with 40 additions and 20 deletions

View File

@ -2,6 +2,7 @@
class TracksController extends Controller class TracksController extends Controller
{ {
function __construct() function __construct()
{ {
if (!App::$user->id) { if (!App::$user->id) {
@ -16,7 +17,6 @@ class TracksController extends Controller
self::addScript('/js/bootstrap.min.js'); self::addScript('/js/bootstrap.min.js');
self::addStyle('/css/bootstrap.min.css'); self::addStyle('/css/bootstrap.min.css');
self::addStyle('/css/bootstrap-theme.min.css'); self::addStyle('/css/bootstrap-theme.min.css');
} }
function actionIndex() function actionIndex()
@ -42,7 +42,7 @@ class TracksController extends Controller
$temp = pathinfo($_FILES['file']['name']); $temp = pathinfo($_FILES['file']['name']);
$filename = $_FILES['file']['name']; $filename = $_FILES['file']['name'];
$extension = strtolower($temp['extension']); $extension = strtolower($temp['extension']);
$uploaddir = App::getBasedir().'tracks/'; $uploaddir = App::getBasedir() . 'tracks/';
if ($extension !== 'gpx') { if ($extension !== 'gpx') {
App::error404('Неизвестный тип'); App::error404('Неизвестный тип');
@ -50,12 +50,12 @@ class TracksController extends Controller
$tmp = TrackFiles::model()->add(array( $tmp = TrackFiles::model()->add(array(
'owner' => App::$user->id, 'owner' => App::$user->id,
'name' => 'Трек '.date('d-m-Y H:i:s'), 'name' => 'Трек ' . date('d-m-Y H:i:s'),
'filename' => $filename, 'filename' => $filename,
'createdAt' => date('c'), 'createdAt' => date('c'),
)); ));
$newName = 'track'.$tmp->id . '.' . $extension; $newName = 'track' . $tmp->id . '.' . $extension;
if (!move_uploaded_file($_FILES['file']['tmp_name'], $uploaddir . $newName)) { if (!move_uploaded_file($_FILES['file']['tmp_name'], $uploaddir . $newName)) {
App::error404(); App::error404();
} }
@ -65,7 +65,7 @@ class TracksController extends Controller
function actionImportgpx() function actionImportgpx()
{ {
$id = (int)App::getParam('id'); $id = (int) App::getParam('id');
if (!$id) { if (!$id) {
App::error404(); App::error404();
@ -77,7 +77,7 @@ class TracksController extends Controller
App::error404(); App::error404();
} }
$gpxObject = simplexml_load_file(App::getBasedir().'tracks/track'.$trackFile->id.'.gpx'); $gpxObject = simplexml_load_file(App::getBasedir() . 'tracks/track' . $trackFile->id . '.gpx');
$trip = Trips::model()->add( $trip = Trips::model()->add(
array( array(
@ -85,11 +85,12 @@ class TracksController extends Controller
'createdAt' => isset($gpxObject->metadata->time) ? $gpxObject->metadata->time : date('c'), 'createdAt' => isset($gpxObject->metadata->time) ? $gpxObject->metadata->time : date('c'),
'owner' => App::$user->id, 'owner' => App::$user->id,
'distance' => 0, 'distance' => 0,
'description' => 'Трек сздан '.date('d-m-Y H:i').' из файла '. $trackFile->filename, 'description' => 'Трек сздан ' . date('d-m-Y H:i') . ' из файла ' . $trackFile->filename,
'status' => Trips::STATUS_PRIVATE, 'status' => Trips::STATUS_PRIVATE,
) )
); );
$distance = 0;
$wayPoints = array(); $wayPoints = array();
$tracks = array(); $tracks = array();
$latlngs = array(); $latlngs = array();
@ -102,16 +103,16 @@ class TracksController extends Controller
} }
$wayPoint = WayPoints::model()->add( $wayPoint = WayPoints::model()->add(
array( array(
'tripId' => $trip->id, 'tripId' => $trip->id,
'lat' => floatval($block['lat']), 'lat' => floatval($block['lat']),
'lng' => floatval($block['lon']), 'lng' => floatval($block['lon']),
'alt' => 0, 'alt' => 0,
'speed' => 0, 'speed' => 0,
'createdAt' => $block->time, 'createdAt' => $block->time,
'name' => (string) $block->name, 'name' => (string) $block->name,
'description' => (string) $block->desc, 'description' => (string) $block->desc,
) )
); );
} }
@ -125,16 +126,17 @@ class TracksController extends Controller
$track = Tracks::model()->add( $track = Tracks::model()->add(
array( array(
'tripId' => $trip->id, 'tripId' => $trip->id,
'name' => (string)$block->name ? (string)$block->name : 'Фрагмент трека №'.$tracksCounter, 'name' => (string) $block->name ? (string) $block->name : 'Фрагмент трека №' . $tracksCounter,
'distance' => 0, 'distance' => 0,
'description' => '', 'description' => '',
) )
); );
$distanceTmp = 0;
$prevPoint = array();
$tracksCounter++; $tracksCounter++;
$trackPoints = array(); $trackPoints = array();
foreach ($trkpt as $tpt) { foreach ($trkpt as $tpt) {
$trackPoint = TrackPoints::model()->add( $trackPoint = TrackPoints::model()->add(
array( array(
'trackId' => $track->id, 'trackId' => $track->id,
@ -145,12 +147,30 @@ class TracksController extends Controller
'speed' => 0, 'speed' => 0,
) )
); );
if ($prevPoint) {
$distanceTmp += Geo::distance($prevPoint, array('lat' => floatval($tpt['lat']), 'lng' => floatval($tpt['lon'])));
// print $distanceTmp.'<br/>';
}
$prevPoint = array(
'lat' => floatval($tpt['lat']),
'lng' => floatval($tpt['lon']),
);
} }
$distance += $distanceTmp;
$track->distance = $distanceTmp;
$track->save();
} }
} }
} }
} }
$trip->distance = $distance;
$trip->save();
App::redirect('/tracks'); App::redirect('/tracks');
} }