Answer the question
In order to leave comments, you need to log in
To calculate the cost of delivery of concrete, I use api Yandex maps. How to cancel building a route if you have specified an address further than 50 km from the factory?
I use this script, you need to make sure that the route is not built at all if the address is further than 50 km
<script>
ymaps.ready(init);
function init() {
// Стоимость за километр.
var DELIVERY_TARIFF = 400,
// Минимальная стоимость.
MINIMUM_COST = 2400,
SUMM = 0,
myMap = new ymaps.Map('map1', {
center: [55.189660, 36.650437],
zoom: 11,
controls: []
}),
// Создадим панель маршрутизации.
routePanelControl = new ymaps.control.RoutePanel({
options: {
// Добавим заголовок панели.
showHeader: true,
title: 'Расчет стоимости доставки',
maxWidth: '300px',
autofocus:true
}
}),
zoomControl = new ymaps.control.ZoomControl({
options: {
size: 'small',
float: 'none',
position: {
bottom: 145,
right: 5
}
}
});
// Пользователь сможет построить только автомобильный маршрут.
routePanelControl.routePanel.options.set({
types: {auto: true},
});
// Если вы хотите задать неизменяемую точку "откуда", раскомментируйте код ниже.
routePanelControl.routePanel.state.set({
fromEnabled: false,
from: 'Балабаново, Лермонтова 16А'
});
myMap.controls.add(routePanelControl).add(zoomControl);
// Получим ссылку на маршрут.
routePanelControl.routePanel.getRouteAsync().then(function (route) {
// Зададим максимально допустимое число маршрутов, возвращаемых мультимаршрутизатором.
route.model.setParams({results: 1}, true);
// Повесим обработчик на событие построения маршрута.
route.model.events.add('requestsuccess', function () {
var activeRoute = route.getActiveRoute();
if (activeRoute) {
// Получим протяженность маршрута.
var length = route.getActiveRoute().properties.get("distance"),
// Вычислим стоимость доставки.
price = calculate(Math.round(length.value / 1000)),
// Создадим макет содержимого балуна маршрута.
balloonContentLayout = ymaps.templateLayoutFactory.createClass(
'<span>Расстояние от завода: ' + length.text + '.</span><br/>' +
'<span style="font-weight: bold; font-style: italic">'+price+'</span>');
// Зададим этот макет для содержимого балуна.
route.options.set('routeBalloonContentLayout', balloonContentLayout);
// Откроем балун.
activeRoute.balloon.open();
var adr = routePanelControl.routePanel.state.get("to");
var myCoordsfrom = [adr];
var myGeocoder = ymaps.geocode(myCoordsfrom);
myGeocoder.then(
function (res) {
var nearest = res.geoObjects.get(0);
var name = nearest.properties.get('text');
document.querySelector('#address').value = name;
},
function (err) {
alert('Ошибка');
}
);
}
});
});
}
</script>
Answer the question
In order to leave comments, you need to log in
You have a distance, I don’t know what it is measured in, but something like a simple condition:
var length = route.getActiveRoute().properties.get("distance");
if (length.value > 50000) {
balloonContentLayout = ymaps.templateLayoutFactory.createClass(
'<span>Вы находитесь слишком далеко от завода- Вам придется приехать</span><br/>');
} else {
balloonContentLayout = ymaps.templateLayoutFactory.createClass(
'<span>Расстояние от завода: ' + length.text + '.</span><br/>' +
'<span style="font-weight: bold; font-style: italic">'+price+'</span>');
}
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question