Здравствуйте!
Имеется ли какое-либо ограничение на количество запросов к маршрутизатору, кроме 25000 в сутки для бесплатной версии js-API?
В моём проекте происходит построение большого количества маршрутов за раз, однако больше 1147 маршрутов (год основания Москвы? ;)) ни разу не удавалось получить за раз. При этом при повторном подключении маршруты снова строятся, но на каком-то моменте сервер перестает отвечать. Пробовал вводить таймауты и кликать руками — всё равно упираюсь в какой-то предел, 1147 или меньше.
Если убрать воду, то мой код выглядит следующимо бразом:
По клику на карту определяются координаты, для которых требуется построить маршрут, далее рекурсивно вызывается функция построения маршрута после того, как пришёл ответ от сервера для предыдущего маршрута. И так до тех пор, пока все координаты не будут обработаны.
function init () {
var targetCoords = [55.848527, 37.583103],
myMap = new ymaps.Map('map', {
center: targetCoords,
zoom: 11
}, {
searchControlResults: 1,
searchControlNoCentering: true
}),
currentRoute,
sourceCoordsArr,
targetPoint;
routesArr = [];
var sourceCoordsArrLength;
myMap.events.add('click', onMapClick);
function evalRoute(source, target){
var currentRoute = new ymaps.multiRouter.MultiRoute(
{
referencePoints: [source, target],
params: { routingMode: 'masstransit'},
});
currentRoute.events.add("activeroutechange", function (event) {
var routes = currentRoute.getRoutes();
for (var i = 0; i<routes.getLength(); i++){
// some code
}
routeArr.push(route);
console.log('' + getCurrentTime() + '\t' + routeArr.length+' ' + route);
if(routeArr.length == sourceCoordsArrLength){
// some code
}
else{
evalRoute(sourceCoordsArr[sourceCoordsArrIndex++], targetCoords);
console.log('' + getCurrentTime() + '\t' +sourceCoordsArrIndex+' waitig..');
}
});
}
function evalCoordinates(targetCoords){
// some code
return sourceCoordsArr;
}
function onMapClick (e) {
metricArr = [];
clearTargetPoint();
targetCoords = e.get('coords');
targetPoint = new ymaps.Placemark(targetCoords, { iconContent: '' }, { preset: 'islands#blueCircleIcon' });
myMap.geoObjects.add(targetPoint);
// Generate source coordinates
sourceCoordsArr = evalCoordinates(targetCoords);
sourceCoordsArrLength = sourceCoordsArr.length;
str = '' + sourceCoordsArrLength + ' точек';
evalRoute(sourceCoordsArr[sourceCoordsArrIndex++], targetCoords);
}
}
ymaps.ready(init);