156 lines
3.1 KiB
JavaScript
156 lines
3.1 KiB
JavaScript
/*
|
||
* Набор функций для работы с маршрутами.
|
||
*/
|
||
|
||
/**
|
||
* Строит маршрут по выбранным точкам.
|
||
* @returns {undefined}
|
||
*/
|
||
function buildRoute()
|
||
{
|
||
wayPoints = Array();
|
||
if (route)
|
||
myMap.removeLayer(route);
|
||
|
||
$('#wayPoints div').each(function(i, el)
|
||
{
|
||
wayPoints.push({latLng: points[$(el).attr('pointId')]._latlng});
|
||
});
|
||
|
||
if (wayPoints.length > 1)
|
||
{
|
||
L.Routing.osrm().route(wayPoints, function(err, routes) {
|
||
if (err) {
|
||
console.error(err);
|
||
alert('Произошла ошибка. Вероятно построить маршрут по выбранным точкам невозможно.');
|
||
} else {
|
||
route = L.Routing.line(routes[0]);
|
||
distance = Math.round(routes[0].summary.totalDistance / 1000);
|
||
$('#routeDistance').html('Протяженность <b>' + distance + '</b> км.');
|
||
route.addTo(myMap);
|
||
}
|
||
});
|
||
|
||
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)
|
||
{
|
||
$('#wayPoints').append('<div pointid="' + id + '" class="wayPoint"><span onclick="$(this).parent().remove();buildRoute();">×</span> ' + points[id].options.title + '</div>');
|
||
closePopup();
|
||
openBox('Route', true);
|
||
|
||
buildRoute();
|
||
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;
|
||
}
|
||
|
||
|