155 lines
3.2 KiB
JavaScript
155 lines
3.2 KiB
JavaScript
/*
|
||
* Набор функций для работы с маршрктами.
|
||
*/
|
||
|
||
/**
|
||
* Строит маршрут по выбранным точкам.
|
||
* @returns {undefined}
|
||
*/
|
||
function buildRoute()
|
||
{
|
||
wayPoints = Array();
|
||
if (route)
|
||
myMap.geoObjects.remove(route);
|
||
|
||
$('#wayPoints div').each(function(i, el)
|
||
{
|
||
wayPoints.push(points[$(el).attr('pointId')].geometry.getCoordinates());
|
||
});
|
||
|
||
ymaps.route(wayPoints, {
|
||
mapStateAutoApply: true
|
||
}).then(function(newRoute) {
|
||
route = newRoute;
|
||
route.options.set({
|
||
// в балуне выводим только информацию о времени движения с учетом пробок
|
||
balloonContenBodyLayout: ymaps.templateLayoutFactory.createClass('$[properties.humanJamsTime]'),
|
||
strokeColor: '9000ffff',
|
||
opacity: 0.9
|
||
});
|
||
|
||
myMap.geoObjects.add(route);
|
||
distance = Math.round(route.getLength() / 1000);
|
||
$('#routeDistance').text(distance + ' км.');
|
||
routeToURL();
|
||
});
|
||
}
|
||
|
||
/**
|
||
* Сохраняет маршрут на сервере.
|
||
* @returns {undefined}
|
||
*/
|
||
function saveRoute()
|
||
{
|
||
wayPoints = Array();
|
||
name = prompt('Как назвать маршрут?', 'Мой маршрут');
|
||
|
||
$('#wayPoints div').each(function(i, el)
|
||
{
|
||
wayPoints.push($(el).attr('pointId'));
|
||
});
|
||
|
||
if (name && name != '')
|
||
$.ajax({
|
||
type: "POST",
|
||
url: "/json/saveroute/",
|
||
data: {
|
||
name: name,
|
||
points: wayPoints
|
||
},
|
||
success: function(data) {
|
||
console.log(data);
|
||
},
|
||
error: function(data) {
|
||
console.log(data);
|
||
}
|
||
});
|
||
}
|
||
|
||
/**
|
||
* Формирует список точек маршрута из JSON.ы
|
||
* @param {JSON} data
|
||
* @returns {Boolean}
|
||
*/
|
||
function loadRouteJSON(data)
|
||
{
|
||
$('#wayPoints').text('');
|
||
|
||
response = JSON.parse(data);
|
||
for (var k in response)
|
||
{
|
||
addToRoute(response[k]);
|
||
}
|
||
|
||
return true;
|
||
}
|
||
|
||
/**
|
||
* Подгружает маршрут с заданныи ID с сервера.
|
||
* @param {Integer} id
|
||
* @returns {undefined}
|
||
*/
|
||
function loadRoute(id)
|
||
{
|
||
$('#myRoutesWindow').hide(200);
|
||
|
||
$.ajax({
|
||
url: "/json/route/id/" + id,
|
||
success: function(data)
|
||
{
|
||
loadRouteJSON(data)
|
||
buildRoute();
|
||
}
|
||
});
|
||
}
|
||
|
||
/**
|
||
* Удаляет маршрут с заданным ID с сервера.
|
||
* @param {Integer} id
|
||
* @returns {undefined}
|
||
*/
|
||
function deleteRoute(id)
|
||
{
|
||
$.ajax({
|
||
url: "/json/deleteroute/id/" + id,
|
||
success: function(data)
|
||
{
|
||
console.log('Route '+id+' was removed.');
|
||
}
|
||
});
|
||
}
|
||
|
||
/**
|
||
* Добавляет точку с маршрут (в список выбранных точек)
|
||
* @param {Integer} id
|
||
* @returns {Boolean}
|
||
*/
|
||
function addToRoute(id)
|
||
{
|
||
console.log(points[id]);
|
||
$('#wayPoints').append('<div pointid="' + id + '" class="wayPoint"><span onclick="$(this).parent().remove()">×</span> ' + points[id].options.title + '</div>');
|
||
myMap._popup._close();
|
||
openBox('Route', true);
|
||
return true;
|
||
}
|
||
|
||
/**
|
||
* Формирует URL в соответсвии с точками маршрута.
|
||
* @returns {Boolean}
|
||
*/
|
||
function routeToURL()
|
||
{
|
||
wayPoints = Array();
|
||
|
||
$('#wayPoints div').each(function(i, el)
|
||
{
|
||
wayPoints.push($(el).attr('pointId'));
|
||
});
|
||
|
||
history.pushState({}, document.title, "/?route=" + JSON.stringify(wayPoints));
|
||
|
||
return true;
|
||
}
|
||
|
||
|