tengo algunos problemas con la API de mapas HERE que genera los datos que solicito demasiadas veces. Necesito que emita solo una vez cada 10 segundos, sin embargo, lo está haciendo muchas más veces que eso.
El código que tengo aquí es el siguiente:
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); });Necesito tomar estas coordenadas específicas ya que esto se está alimentando a otra API que está creando marcadores en el mapa en áreas específicas. Al acercar, espera 10 segundos para ejecutar la función, pero luego arroja los cambios de coordenadas para cada cambio en el modelo de vista del mapa durante esos 10 segundos.
La otra API tiene un límite de solicitudes de 100 cada 15 minutos. Así que necesito que esto cambie para que ejecute la función cada 10 segundos, y solo generará la información para el modelo de vista final cuando se ejecute la función.
Primero, no use el nombre interno de objetos como .b.bounds.cb.X - b, cb, X están definidos por la compilación de la biblioteca js y se cambiarán para la nueva versión de JS API. Utilice para ello un nombre de métodos y objetos descritos en la documentación: https://developer.here.com/documentation/maps/3.1.29.0/api_reference/H.map.ViewModel.html#getLookAtData como:
var mapCorners = map.getViewModel().getLookAtData().bounds.getBoundingBox();En segundo lugar, el evento de mapa 'mapviewchange' se ejecuta varias veces durante la interacción con el mapa, por lo tanto, se obtiene la ejecución de varias veces de la función getMapCorners. Sugerencia para lograr lo que quieres:
function getMapCorners() { console.log("getMapCorners!!!", map.getViewModel().getLookAtData().bounds.getBoundingBox()); map.addEventListener("mapviewchange", onMapViewChange); } function onMapViewChange() { map.removeEventListener("mapviewchange", onMapViewChange); setTimeout(getMapCorners, 10000); }Consulte el código completo allí en https://jsfiddle.net/1m8fvLjy/1/
Si desea ejecutar getMapCorners una vez cada 10 segundos, haga lo siguiente:
function doEveryTenSeconds(){ getMapCorners(); setTimeout(doEveryTenSeconds, 10000); } doEveryTenSeconds();