Начал делать разрезание трека на части, но что-то работает не так - тупаются точки

This commit is contained in:
Krivchikov Dmitry 2016-06-01 14:57:25 +03:00
parent 4b17d0e630
commit eccbb9c48a
4 changed files with 147 additions and 9 deletions

View File

@ -191,4 +191,125 @@ class EdittrackController extends Controller
self::renderPartial('json.php', $trackpoints);
}
function actionCut()
{
$id = intval(App::getParam('id'));
$trackPoint = TrackPoints::model()->getByPK($id);
if ($trackPoint->isEmpty()) {
App::error404();
}
$track = Tracks::model()->getByPK($trackPoint->trackId);
if ($track->isEmpty()) {
App::error404();
}
$trip = Trips::model()->getByPK($track->tripId);
if ($trip->isEmpty() || $trip->owner != App::$user->id) {
App::error404();
}
$tracks = Tracks::model()->getAll(array('where' => '`tripId` = ?'), array($trip->id));
foreach ($tracks as $trk) {
$newTrack = Tracks::model()->add(
array(
'tripId' => $trip->id,
'name' => $trk->name,
'distance' => $trk->distance,
'description' => $trk->description,
)
);
if ($trk->id == $track->id) {
// $prevPoint = false;
// $distanceTmp = 0;
$trackPoints = TrackPoints::model()->getAll(array('where'=>'`trackId` = ? AND `id` <= ?', 'order' => 'id'), array($trk->id, $trackPoint->id));
foreach ($trackPoints as $tpt) {
TrackPoints::model()->add(
array(
'trackId' => $newTrack->id,
'lat' => floatval($tpt->lat),
'lng' => floatval($tpt->lng),
'alt' => $tpt->alt,
'createdAt' => $tpt->createdAt,
'speed' => $tpt->speed,
)
);
// if ($prevPoint) {
// $distanceTmp += Geo::distance($prevPoint, array('lat' => floatval($tpt->lat), 'lng' => floatval($tpt->lng)));
// }
//
// $prevPoint = array(
// 'lat' => floatval($tpt->lat),
// 'lng' => floatval($tpt->lng),
// );
}
// $newTrack->distance = $distanceTmp;
// $newTrack->save();
$prevPoint = false;
$distanceTmp = 0;
$newTrack = Tracks::model()->add(
array(
'tripId' => $trip->id,
'name' => $trk->name . ' / #2',
'distance' => $trk->distance,
'description' => $trk->description,
)
);
$trackPoints = TrackPoints::model()->getAll(array('where'=>'`trackId` = ? AND `id` >= ?', 'order' => 'id'), array($trk->id, $trackPoint->id));
foreach ($trackPoints as $tpt) {
TrackPoints::model()->add(
array(
'trackId' => $newTrack->id,
'lat' => floatval($tpt->lat),
'lng' => floatval($tpt->lng),
'alt' => $tpt->alt,
'createdAt' => $tpt->createdAt,
'speed' => $tpt->speed,
)
);
// if ($prevPoint) {
// $distanceTmp += Geo::distance($prevPoint, array('lat' => floatval($tpt->lat), 'lng' => floatval($tpt->lng)));
// }
//
// $prevPoint = array(
// 'lat' => floatval($tpt->lat),
// 'lng' => floatval($tpt->lng),
// );
}
// $newTrack->distance = $distanceTmp;
// $newTrack->save();
} else {
$trackPoints = TrackPoints::model()->getAll(array('where'=>'`trackId` = ?', 'order' => 'id'), array($trk->id));
foreach ($trackPoints as $tpt) {
TrackPoints::model()->add(
array(
'trackId' => $newTrack->id,
'lat' => floatval($tpt->lat),
'lng' => floatval($tpt->lng),
'alt' => $tpt->alt,
'createdAt' => $tpt->createdAt,
'speed' => $tpt->speed,
)
);
}
}
App::DB()->query("DELETE FROM `trackPoints` WHERE `trackId` = ".$trk->id);
$trk->delete($trk->id);
}
$trip->json = '';
$trip->save();
App::redirect('/tracks/edit/id/' . $trip->id);
}
}

View File

@ -621,7 +621,7 @@ class JsonController extends Controller
}
$tracks = Tracks::model()->getAll(array('where' => '`tripId` = ?'), array($trip->id));
$tracks = Tracks::model()->getAll(array('where' => '`tripId` = ?', 'order' => 'id'), array($trip->id));
if ($tracks) {
foreach ($tracks as $track) {
$resLatlngs = array();

7
public/js/editTrack.js Normal file
View File

@ -0,0 +1,7 @@
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/

View File

@ -49,7 +49,7 @@
<a href="/edittrack/deletetrack/id/<?= $track->id ?>" class="btn btn-danger" onclick="return confirm('Вы уверены, что хотите удалить фрагмент трека?')" title="Удалить фрагмент трека"><span class="glyphicon glyphicon-trash" aria-hidden="true"></span></a>
<a href="#" class="btn btn-default" onclick="loadTrackDetails(<?= $track->id ?>)" title="Просмотреть точки"><span class="glyphicon glyphicon-list" aria-hidden="true"></span></a>
<?php if ($tracksCounter < count($tracks)):?>
<a href="/edittrack/mergetrack/id/<?= $track->id ?>" class="btn btn-default" onclick="return confirm('Вы уверены, что хотите совместить фрагмент трека с идущим ниже?')" title="Слить с идущим ниже"><span class="glyphicon glyphicon-save" aria-hidden="true"></span></a>
<a href="/edittrack/mergetrack/id/<?= $track->id ?>" class="btn btn-default" onclick="return confirm('Вы уверены, что хотите совместить фрагмент трека с идущим ниже?')" title="Слить с идущим ниже"><span class="glyphicon glyphicon-resize-small" aria-hidden="true"></span></a>
<?php endif; ?>
</div>
</div>
@ -170,7 +170,7 @@
$('#trackpointsList'+id).html('');
if (typeof (data) != 'undefined') {
for (var i = 0; i < data.length; i++) {
$('<div>' + data[i].id + ' - ' + data[i].lat + ' / '+ data[i].lng+'</div>').appendTo('#trackpointsList'+id);
$(makeRow(data[i])).appendTo('#trackpointsList'+id);
}
}
},
@ -179,4 +179,14 @@
}
});
}
function makeRow(data)
{
row = '<div class="trackPoint">';
row += data.id + ' - ' + data.lat + ' / '+ data.lng;
row += ' <a href="/edittrack/cut/id/'+data.id+'" title="Разрезать трек в этой точке"><span class="glyphicon glyphicon-resize-full" aria-hidden="true"></span></a> ';
row += '</div>';
return row;
}
</script>