ЗДЕСЬ API карт выводит результаты функции слишком много раз

#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/