Клуб API Карт

Отображение объектов (меток) на карте

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

Как сделать что бы метки отображались только те что в радиусе открытой карты? 
И при эвенте boundschange они менялись?

http://maps.yandex.ru/?text=%D0%BC%D0%B5%D1%82%D0%BA%D0%B8&sll=37.65482667620114%2C55.70488961304856&sspn=0.2712249755859517%2C0.08268173500071185&z=13&results=20&ll=37.654827%2C55.704890&spn=0.271225%2C0.082682&l=map

Тут мы видим 5 меток, справа тоже написанно 5.

Сдвигаем карту на восток, у нас показываются другие метки а те что за экраном карты, скрываются.

На практике: я вытаскивыю из БД 100 записей по всей Москве.
В цикле они объявляются

myPlacemark = new ymaps.Placemark(coord[i].point.split(','), properties, market);
// Добавляем метку в коллекцию.
myCollection.add(myPlacemark);

 

 

Хотелось бы что бы отображалось только то что в поле карты.

 

Уже все перекопал, не могу найти внятного ответа. Как будто не кто не делал такого.

На самих картах не найти, все закодированно у яндекса(( 

 

 

я так понимаю надо что то с hotspot делать?

 

 

 

 

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

как вариант перебирать все метки в цикле и смотреть находятся ли они в боунде карты

Удалённый пользователь
28 января 2016, 03:15

Как это можно реализовать?

json возвращает координаты меток для всей карты.
Циклом я их перебираю и добавляю.

Какие методы требуется испльзовать getBounds() ?
Не могу собращить как написать 

 

 

   for (i = 0; i < coord.length; i++)                {                                           var properties =                    {                        iconContent:'' + listCount + '',                        balloonContent:coord[i].content                    };                    marker_style = "twirl#nightIcon"                    if (coord[i].organisations != '')                    {                        marker_style = coord[i].organisations;                     }                    // Стиль маркера                    var market =                    {                        preset:marker_style                    }                    myPlacemark = new ymaps.Placemark(coord[i].point.split(','), properties, market);                    // Добавляем метку в коллекцию.                    myCollection.add(myPlacemark);                    result_content += '

' + listCount + '.

  • ' + coord[i].prod_name_js + ''
  •                         + price                        + coord[i].company                        + adress +                        '';                    if (type == 'itemc')                    {                                                result_content += '';                    }                    listCount++;                    colvo = listCount;                }

     

     

    var coords = map.getBounds(),point = [55.56748703766528,37.541123046874986];
    if(point[0]>=coords[0][0]&&point[0]&point[1]>=coords[0][1]&&point[1] alert('Внутри');
    else
    alert('Не Внутри');
    };

    Удалённый пользователь
    28 января 2016, 03:15

    Я так понимаю map.getBounds() это массив координат прямоугольника. ( [55.56748703766528,37.541123046874986]) ?

    Вместо map.getBounds() я попытался использовать getParamUrl(document.URL, 'center'), эта функция берет хеш координаты.

    coords = getParamUrl(document.URL, 'center').split(','), point = coord[i].point.split(',');

     

    Пробегая циклом, все точки получаются "Не Внутри".


     

     map.getBounds()  возвращает [[x1,y1],[x2,y2]] соответственно координаты верхнего левого и нижнего правого угла видимой области карты, а дальше тупо проверяем на вхождение точки в этот прямоугольник. Задача 5-го класса: если точка имеет координаты [x,y] то проверка на то лежит ли она внутри  [[x1,y1],[x2,y2]] сводиться к 4 условиям x>=x1&&x=y1&&y

     

    Удалённый пользователь
    28 января 2016, 03:15

    Допустим.
    Из реального примера беру данные. 

    Координаты getBounds

    [[55.71057077721721,37.584856691647005],[55.739634821558965,37.644938173580584]]

    В данных координатах реально видны 3 точки, когда смотришь на карту.
    Проверяя в цикле, как вы писали выше, условия не проходят.

    С чем может быть связанно? 

    Удалённый пользователь
    28 января 2016, 03:15

    Разобрался, спасибо.

    зачем отображать чтото в видимой области, если вы все точки разом пересылаете?

    Удалённый пользователь
    28 января 2016, 03:15

    На сайте есть ограниченное пространство. 
    Левый блок от карты, выводит описание каждой метки.

    Требуется что бы описания соответствовали меткам которые отображаются на карте в прямоугольнике.
    Если сдвинуть карту на другие метки, восточне скажем, то и в блоке описания должны появлятся новые данные.

    Постоянно тянуть из БД, как то затратно, учесть что запросы очень большие и тяжелые. 

    ну а все метки вы за раз подгружаете

    или нет?

    если за раз, то что тогда затратно?

    Удалённый пользователь
    28 января 2016, 03:15

    Так я делаю 1 запрос единожны, при клике по ссылке.
    А если постоянно при эвенте перемещения карты, то так может быть сотни запросов.

    Скажем на карте сидят 10 человек, и каждый ради прикола ее туда-сюда дергает.