Клуб API Карт

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

Пост в архиве.
wowhlam
8 ноября 2012, 03:47

Как сделать что бы метки отображались только те что в радиусе открытой карты? 
И при эвенте 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 комментариев

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

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

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('Не Внутри');
    };

    Я так понимаю 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

     

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

    Координаты getBounds

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

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

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

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

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

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

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

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

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

    или нет?

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

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

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