У меня есть код выводящий большое количество меток на яндекс карту. Список офисов берется по api (также список офисов записываются в select). Проблема в том, что лимитов бесплатного тарифа яндекс мне хватает на несколько перезагрузок страницы. За раз происходит ~1700 вызовов геокодера. Дальше яндекс блокирует аккаунт на сутки. Причем со старой версией кода такого не происходило. Это нормальное поведение или я где то накосячил?
const apiUrl = 'тут апи со списком офисов';
let map, placemarks = [];
let regions = {};
let geocodeCache = {};
ymaps.ready(initMap);
function initMap() {
map = new ymaps.Map('map_office', {
center: [55.751574, 37.573856],
zoom: 10
});
$.getJSON(apiUrl, function(data) {
data.data.forEach(item => {
const city = item.city;
const region = item.region;
const address = item.address;
const vacancies = item.vacancies;
if (!regions[region]) {
regions[region] = {};
}
if (!regions[region][city]) {
regions[region][city] = {};
}
if (!regions[region][city][address]) {
regions[region][city][address] = [];
}
regions[region][city][address] = vacancies;
// Add placemark to the map
addPlacemark(region, city, address);
});
function addPlacemark(region, city, address) {
if (geocodeCache[address]) {
const coords = geocodeCache[address];
createPlacemark(coords, address, region, city);
} else {
ymaps.geocode(address, { results: 1 }).then(function(res) {
var geoObject = res.geoObjects.get(0);
if (geoObject) {
var coords = geoObject.geometry.getCoordinates();
geocodeCache[address] = coords;
createPlacemark(coords, address, region, city);
} else {
console.error(`Geocode failed for address: ${address}`);
}
}).catch(function(error) {
console.error(`Geocode failed for address: ${address}, Error: ${error}`);
});
}
}
function createPlacemark(coords, address, region, city) {
var placemark = new ymaps.Placemark(coords, {
balloonContent: address
});
// Add event listener for placemark click
placemark.events.add('click', function () {
setTimeout(function() {
$('#city').val(city).trigger('change');
setTimeout(function() {
$('#address').val(address).trigger('change');
setTimeout(function() {
const firstVacancyOption = $('#vacancy option:eq(1)').val();
if (firstVacancyOption) {
$('#vacancy').val(firstVacancyOption).prop('disabled', false);
}
}, 500);
}, 500);
}, 500);
});
map.geoObjects.add(placemark);
placemarks.push(placemark);
}
}).fail(function(jqxhr, textStatus, error) {
console.error(`Request Failed: ${textStatus}, ${error}`);
});
}