Клуб API Карт

Найдено на тему «области видимости»:
Определение меток попадающих в видимую область карты и получение их ID
vikktor.com
13 октября 2017, 10:43

Решаю задачу с определением меток попадающих в видимую область карты. При изменении масштаба карты, мне надо обновлять список на список состоящий только из объектов которые видны на карте. Для создания меток использую ObjectManager (с кластеризацией)

Получить объекты я могу 2-мя способами, но у обоих пока есть недостатки, которые не позволяют верно решить задачу.

Вариант 1.

// Определение объектов попадающих в видимую область карты
    myMap.events.add(['boundschange','datachange','objecttypeschange'], function(e){
        ymaps.geoQuery(objectManager.objects).searchInside(myMap).each(function (object) {
            console.log(object);
        });
    });

В этом варианте проблема в том, что geoQuery корректно отдает список меток в видимой области, но я не могу получить ID метки, который я назначал про создании списка objectManager.objects, чтобы потом сравнить со своим списком материалов из базы данных. ID метки у меня совпадает с ID материалов.

Вариант 2.

// Определение объектов попадающих в видимую область карты
    myMap.events.add(['boundschange','datachange','objecttypeschange'], function(e){
        objectManager.objects.each(function (object) {
          var objectState = objectManager.getObjectState(object.id);
          if (objectState.isShown) {
            console.log(object.id);
          }
        });
    });

Во этом варианте я могу получить список ID видимой области, но есть другая проблема. В видимую область попадают также объекты, которые на самом деле в видимой области не видны, но находятся где-то рядом, что неправильно. Приложил скриншот.

Подскажите пожалуйста, как правильно получить назначенные при создании массива объектов ID? Либо как правильно заставить работать isShown? Или может есть другой более правильый вариант?

Спасибо.

7 комментариев
ObjectManager,GeoQueryResult,области видимости,objectState.isShown
setBounds не отрабатывает при динамической подгрузке данных
marina.d@ivandamari.ru
6 октября 2015, 12:02

Всем привет! Столкнулась с такой проблемой: загружаю данные на карту (и заодно в html страницы, рядом с картой) аяксом, после чего делаю myMap.setBounds(myMap.geoObjects.getBounds()); Но масштабирование не происходит. Пытаюсь выяснить, в чем дело, при помощи отладчика - карта масштабируется. Убираю точку остановки - опять не масштабируется. В итоге подставила костыль в виде setTimeout - вроде все работает. Это нормально или я что-то не так делаю?

Код:

$.getJSON("/getorgs?id=5", function(json) {
    myOrgMap.geoObjects.add(addMarker(json.object.id, json.object.coords, 'item', true));
    for (i = 0; i < json.items.length; i++) {
      var count = json.items[i].result.length;               
      $('.right .ob').css({'background': 'none'});
      $('.right .ob').append('<div class="what" id="cat_'+i+'"><a href="javascript:void(0)" class="sp sdown">'+json.items[i].cat+' ('+count+') &#9660;</a><ul></ul><div class="cb"></div></div>');     
      for(j=0; j<4; j++) {
        if(j >= count) break;
        myOrgMap.geoObjects.add(addOrgMarker(json.items[i].result[j]));
        $('.right .ob #cat_'+i+' ul').append(json.items[i].result[j].line);
      }
      if(count > 4) $('.right .ob #cat_'+i).append('<a href="javascript:void(0)" class="bl sdown">&#9658; Еще '+(count - 4)+' объектов</a>');
    }
    $('.right .ob').append('<div class="cb"></div>');
  });
  setTimeout(function() {
    myOrgMap.setBounds(myOrgMap.geoObjects.getBounds());
    if(myOrgMap.getZoom() > 16) myOrgMap.setZoom(16);
  }, 1000);

 

PS На карту загружаю точку своего объекта + данные из яндекс.справочника

7 комментариев
области видимости,динамическая загрузка
Центрирование карты
g29m62zb
19 ноября 2014, 21:08

Здравствуйте! Разобрался с гео-определением, Загрузкой данных с помощью JQuery и добавление их на карту (JSON).

Это помогло

Остался последний момент:

6 фирм на карте. 5 радом - а одна в Аргентине, на другом конце карты. Но мне надо насильно центрировать карту ровно по Москве - и пускай Аргентина не будет видна (прокрутит сам, если что).

 

var myMap = new ym.Map('YMapsID', {
center: [37.64, 55.76],

Напсильно указываю - не реагирует. Как буд-то сама пытается ухватить все нужные точки, меняя при этом масштаб. А мне не надо чтобы все точки охватить - только цент Европы. Что делать?

1 комментарий
области видимости,jQuery,API 2.1,geoQuery
Показать все метки на карте
chkvadrat.igor
6 декабря 2013, 10:58

Добрый день.

На карте Москва есть 5 меток в разных местах. Пользователь может перемещать, уменьшать и увеличивать масштаб карты.

Каким образом можно изменить маштаб карты и расположить видумую область так чтобы бали видны все точки?

6 комментариев
области видимости,API 2.0
Bounds результата геокодирования
Александр
28 октября 2013, 13:34

 Добрый день. Необходимо получить область. Делаю так:

var loc='Россия, Москва';

var gc = ymaps.geocode(loc,{results:1});


gc.then(
   function(res){
      console.log(res.geoObjects.get(0).geometry.getBounds()); // [[55.753676, 37.619899], [55.753676, 37.619899]]

   }   ,function(err){
      console.log(err.message);
   }
);

 т.е. ответ не область, а точка. Как получить область?

3 комментария
области видимости,API 2.0,геокодирование