Здравствуйте!
Имеется ли какое-либо ограничение на количество запросов к маршрутизатору, кроме 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);