diff --git a/controllers/JsonController.php b/controllers/JsonController.php index 205713f..7fb47ca 100644 --- a/controllers/JsonController.php +++ b/controllers/JsonController.php @@ -658,4 +658,119 @@ class JsonController extends Controller die; } + + static function actionSimpletrack() + { + $id = intval(App::getParam('id')); + + if (!$id) { + App::error404(); + } + + $trip = Trips::model()->getByPK($id); + + if ($trip->isEmpty() || ($trip->status != Trips::STATUS_PUBLIC && $trip->owner != App::$user->id)) { + App::error404(); + } + + $res = array( + 'name' => $trip->name, + 'time' => $trip->createdAt, + ); + + $resWayPoints = array(); + $resTracks = array(); + $resLatlngs = array(); + $totCnt = 0; + + + $wayPoints = WayPoints::model()->getAll(array('where' => '`tripId` = ?'), array($trip->id)); + if ($wayPoints) { + foreach ($wayPoints as $block) { + $resWayPoints[] = array( + 'lat' => floatval($block->lat), + 'lng' => floatval($block->lng), + 'time' => strtotime($block->createdAt), + 'name' => (string) $block->name, + 'description' => nl2br($block->description), + ); + } + } + + + $tracks = Tracks::model()->getAll(array('where' => '`tripId` = ?'), array($trip->id)); + if ($tracks) { + foreach ($tracks as $track) { + $resLatlngs = array(); + $trackPoints = TrackPoints::model()->getAll(array('where' => '`trackId` = ?', 'noKeys' => TRUE), array($track->id)); + if ($trackPoints) { + for ($index = 0; $index < count($trackPoints); $index++) { + + $trackPoint = $trackPoints[$index]; + + if ($index > 2 && $index < count($trackPoints)-2) { + + $nextPoint = $trackPoints[$index+1]; + $nextPoint = array( + 'lat' => $nextPoint->lat, + 'lng' => $nextPoint->lng, + ); + + $distance1 = Geo::distance($prevPoint, array('lat' => $trackPoint->lat, 'lng' => $trackPoint->lng)); + + if ($distance1 < 100) { + continue; + } + + $distance2 = Geo::distance($nextPoint, array('lat' => $trackPoint->lat, 'lng' => $trackPoint->lng)); + $distance3 = Geo::distance($prevPoint, $nextPoint); + + + if (($distance3 / ($distance1+$distance2)) > 0.982) { + continue; + } + } + + $prevPoint = $trackPoints[$index]; + $prevPoint = array( + 'lat' => $prevPoint->lat, + 'lng' => $prevPoint->lng, + ); + + + $resLatlngs[] = array( + 'lat' => $trackPoint->lat, + 'lng' => $trackPoint->lng, + ); + } +// die; + } + + $totCnt += count($resLatlngs); + $resTracks[] = array( + 'name' => (string) $track->name, + 'length' => 0, + 'latlngs' => $resLatlngs, + 'points' => count($resLatlngs), + ); + } + + } + + $res['wayPoints'] = $resWayPoints; + $res['tracks'] = $resTracks; + $res['totCnt'] = $totCnt; + + + $json = self::renderPartial('json.php', $res, TRUE); + + $trip->json = $json; + $trip->save(); + + header('Content-Type: application/json'); + print $json; + die; + } + + } diff --git a/public/js/tracks.js b/public/js/tracks.js index e4afa06..f3dd20d 100644 --- a/public/js/tracks.js +++ b/public/js/tracks.js @@ -41,6 +41,7 @@ function hideTrack(id) function loadTrack(id) { colors = ['red', 'green', 'blue', 'orange']; + colors = ['green']; colorIndex = 0; tracks = new Array(); markers = new Array(); @@ -76,4 +77,43 @@ function loadTrack(id) }); } +function loadSimpleTrack(id) +{ + colors = ['red', 'green', 'blue', 'orange']; + colors = ['red']; + colorIndex = 0; + tracks = new Array(); + markers = new Array(); + $.ajax({ + url: "/json/simpletrack/id/" + id, + success: function (data) { + trips[id] = L.featureGroup(); + + if (typeof (data.tracks) != 'undefined') { + for (var i = 0; i < data.tracks.length; i++) { + color = colors[colorIndex]; + colorIndex = (colorIndex == colors.length-1) ? 0 : colorIndex+1; + + tracks[i] = L.polyline(data.tracks[i].latlngs, {color: color, width: 4, opacity: 0.8}); + tracks[i].bindPopup(data.tracks[i].name); + trips[id].addLayer(tracks[i]) + } + } + + if (typeof (data.wayPoints) != 'undefined') { + for (var i = 0; i < data.wayPoints.length; i++) { + markers[i] = L.marker([data.wayPoints[i]['lat'], data.wayPoints[i]['lng']], {icon: categories.marker, title: data.wayPoints[i]['name']}) + markers[i].bindPopup('' + data.wayPoints[i]['name'] + '
' + data.wayPoints[i]['description']); + trips[id].addLayer(markers[i]) + } + } + + showTrack(id) + }, + error: function (data) { + alert('Не удалось загрузить трек. Возможно это приватный трек и вы не его владелец.') + } + }); +} +