|
|
@ -25,6 +25,7 @@ class WaypointsData {
|
|
|
|
const lat = parseFloat(loc[0].trim())
|
|
|
|
const lat = parseFloat(loc[0].trim())
|
|
|
|
const lon = parseFloat(loc[1].trim())
|
|
|
|
const lon = parseFloat(loc[1].trim())
|
|
|
|
this.markersData.push({
|
|
|
|
this.markersData.push({
|
|
|
|
|
|
|
|
id: point_counter,
|
|
|
|
regionId: r_idx,
|
|
|
|
regionId: r_idx,
|
|
|
|
location: [lat, lon],
|
|
|
|
location: [lat, lon],
|
|
|
|
tooltip: {
|
|
|
|
tooltip: {
|
|
|
@ -119,6 +120,22 @@ function reInitMap(regionId) {
|
|
|
|
}).dxMap('instance');
|
|
|
|
}).dxMap('instance');
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function reInitMapByPoints(indexes) {
|
|
|
|
|
|
|
|
const mapWidget = $('#map').dxMap({
|
|
|
|
|
|
|
|
provider: 'bing',
|
|
|
|
|
|
|
|
apiKey: {
|
|
|
|
|
|
|
|
bing: 'AnpoY0kAA4Kk5A045nQxyVbrlkNTgOuMVBitLxN_iLnZdtONf21HxUTzXwNIebES',
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
zoom: 11,
|
|
|
|
|
|
|
|
height: 440,
|
|
|
|
|
|
|
|
width: 760,
|
|
|
|
|
|
|
|
controls: true,
|
|
|
|
|
|
|
|
markerIconSrc: markerUrl,
|
|
|
|
|
|
|
|
markers: waypoints.getMarkers().filter(p => indexes.includes(p.id)),
|
|
|
|
|
|
|
|
type: 'roadmap'
|
|
|
|
|
|
|
|
}).dxMap('instance');
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// Пересоздание списка точек указанного региона, для выбора мест к посещению
|
|
|
|
// Пересоздание списка точек указанного региона, для выбора мест к посещению
|
|
|
|
function rebuildRegionPointsList(regionId) {
|
|
|
|
function rebuildRegionPointsList(regionId) {
|
|
|
|
if (regionPointsWidget) {
|
|
|
|
if (regionPointsWidget) {
|
|
|
@ -376,6 +393,7 @@ function recalculateWaypoints(waypoints) {
|
|
|
|
|
|
|
|
|
|
|
|
// Одна точка, просто ее выводим
|
|
|
|
// Одна точка, просто ее выводим
|
|
|
|
showTravelPoints([waypoints[0].id]);
|
|
|
|
showTravelPoints([waypoints[0].id]);
|
|
|
|
|
|
|
|
reInitMapByPoints([waypoints[0].id]);
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
var start = waypoints[0];
|
|
|
|
var start = waypoints[0];
|
|
|
|
var end = waypoints[waypoints.length - 1];
|
|
|
|
var end = waypoints[waypoints.length - 1];
|
|
|
@ -384,15 +402,18 @@ function recalculateWaypoints(waypoints) {
|
|
|
|
|
|
|
|
|
|
|
|
// Две точки, старт и стоп, выводим без расчета
|
|
|
|
// Две точки, старт и стоп, выводим без расчета
|
|
|
|
showTravelPoints([waypoints[0].id, waypoints[1].id]);
|
|
|
|
showTravelPoints([waypoints[0].id, waypoints[1].id]);
|
|
|
|
|
|
|
|
reInitMapByPoints([waypoints[0].id, waypoints[1].id]);
|
|
|
|
} else if (waypoints.length == 3) {
|
|
|
|
} else if (waypoints.length == 3) {
|
|
|
|
|
|
|
|
|
|
|
|
// Три точки, старт, стоп и промежуточная выводим без расчета
|
|
|
|
// Три точки, старт, стоп и промежуточная выводим без расчета
|
|
|
|
showTravelPoints([waypoints[0].id, waypoints[1].id, waypoints[2].id]);
|
|
|
|
showTravelPoints([waypoints[0].id, waypoints[1].id, waypoints[2].id]);
|
|
|
|
|
|
|
|
reInitMapByPoints([waypoints[0].id, waypoints[1].id, waypoints[2].id]);
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
|
|
|
|
|
|
|
|
// применяем лучшие поиск из 200.000 лучших вариантов (9! = 362880, берем такого порядка число чтобы не грузить браузер расчетами)
|
|
|
|
// применяем лучшие поиск из 200.000 лучших вариантов (9! = 362880, берем такого порядка число чтобы не грузить браузер расчетами)
|
|
|
|
let path_indexes = stochasticPathFind(waypoints, true, true);
|
|
|
|
let path_indexes = stochasticPathFind(waypoints, true, true);
|
|
|
|
showTravelPoints(path_indexes);
|
|
|
|
showTravelPoints(path_indexes);
|
|
|
|
|
|
|
|
reInitMapByPoints(path_indexes);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|