#javascript #here-api
Вопрос:
возникли некоторые проблемы с API HERE maps, выводящим данные, которые я запрашиваю слишком много раз. Мне нужно, чтобы он выводил только один раз каждые 10 секунд, однако он делает это гораздо чаще.
Код, который у меня есть здесь, выглядит следующим образом:
function getMapCorners() {
var mapView = map.getViewModel();
var mapCorners = mapView.b.bounds.cb.X;
var corners = [mapCorners[9], mapCorners[10], mapCorners[3], mapCorners[4]];
console.log(corners);
}
map.addEventListener("mapviewchange", function () {
setTimeout(getMapCorners, 10000);
});
Мне нужно получить эти конкретные координаты, так как это передается в другой API, который создает маркеры на карте в определенных областях. При увеличении масштаба он ожидает 10 секунд для запуска функции, но затем выдает изменения координат для каждого изменения модели представления карты в течение этих 10 секунд.
Другой API имеет лимит запросов 100 каждые 15 минут. Поэтому мне нужно это изменить, чтобы функция запускалась каждые 10 секунд, и она выводила информацию для окончательной модели представления только при запуске функции.
Комментарии:
1. Код не запускает getMapCorners каждые 10 секунд. Он запускает getMapCorners каждый раз, когда происходит mapviewchange, с 10-секундной задержкой.
Ответ №1:
Если вы хотите запускать getMapCorners каждые 10 секунд, сделайте это:
function doEveryTenSeconds(){
getMapCorners();
setTimeout(doEveryTenSeconds, 10000);
}
doEveryTenSeconds();
Ответ №2:
Во — первых, пожалуйста, не используйте внутренние имена объектов, такие как .b.границы.cb.X-b, cb, X определяются компиляцией библиотеки js и будут изменены для новой версии JS API. Пожалуйста, используйте для этого название методов и объектов, описанных в документации: https://developer.here.com/documentation/maps/3.1.29.0/api_reference/H.map.ViewModel.html#getLookAtData как:
var mapCorners = map.getViewModel().getLookAtData().bounds.getBoundingBox();
Во-вторых, событие карты «mapviewchange» выполняется многократно во время взаимодействия с картой, поэтому вы получаете многократный запуск функции getMapCorners. Предложение достичь того, чего вы хотите:
function getMapCorners() {
console.log("getMapCorners!!!", map.getViewModel().getLookAtData().bounds.getBoundingBox());
map.addEventListener("mapviewchange", onMapViewChange);
}
function onMapViewChange() {
map.removeEventListener("mapviewchange", onMapViewChange);
setTimeout(getMapCorners, 10000);
}
Смотрите, пожалуйста, полный код там на https://jsfiddle.net/1m8fvLjy/1/