Клуб API Карт

Как узнать максималный zoom для учатска карты

Пост в архиве.

Добрый день, появилась проблема такого рода. Всем известно что карты детализированы неравномерно и скадем Москва детализоована гораздо лучше чем какой нибудь населенный пункт в Сибири, из этого возникает вопрос. Как узнать для участка карты максимальный зум, на котором карта не будет пропадать изза отсутствующих полигонов. Т.е. к примеру нужно вызывать карту местности с зумом 15 - в Москве работает в Алтайском крае нет, т.к. на этот зум карт уже нет. Необходимо проверять максимально допустимый зум для области карты с заданным центром, как это сделать если это возможно.

6 комментариев

Благодарю =)

Асинхронный вызов функции влияет на этот кусок кода:

var geoObjectState = this.myCluster.getObjectState(mark);
    if(geoObjectState.isShown)
    {
      if(geoObjectState.isClustered)
      {

        setTimeout( function() { geoObjectState.cluster.balloon.open(); }, 40);
      }
      else
      {
        setTimeout( function() { mark.balloon.open(); }, 40);
      }
    }

Как я понимаю, нужно дождаться пока проверит зумрейндж, как мне отловить этот момент, чтобы мой код отрабатывал после него? Иначе получается что метка не показана, т.е. получается что setCenter срабатывает, после того, как получает ответ о зуме(или я что то неправильно понимаю?), т.о. мне видимо необходимо написать код в callback ассинхронного вызова. Как это можно сделать? с помощью некой

timingFunctionFunction Тайминг-функция. ?

См. Опцию callback

Вопрос решил самостоятельно, если кому то будет интересно то код решения:

this.map.setCenter(Point, zoom, { checkZoomRange: true, callback: function(err){
      if(!err)
      {
        window.scrollBy(0, -9999);
        var geoObjectState = this.myCluster.getObjectState(mark);

        if(geoObjectState.isShown)
        {
          console.log('поймал метку');
          if(geoObjectState.isClustered)
          {

            setTimeout( function() { geoObjectState.cluster.balloon.open(); }, 40);
          }
          else
          {
            setTimeout( function() { mark.balloon.open(); }, 40);
          }
        }

      }
    }
    });