Клуб API Карт

Как лучше обработать 2 объекта с одними координатами?

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

Всем привет!

Возник вопрос: на карте по адресам ищутся объекты и создаются метки.Как происходит обработка двух меток с одинаковыми координатами? Получается одна на другой. Как оптимальнее поступить, чтобы можно было работать с ними обоими?

9 комментариев
Первое, что приходит на ум - это группировка объектов. Вместо нескольких меток в одной точке показываете одну, а при щелчке на ней - показываете список объектов.
Забыл сказать, что API по умолчанию никак не обрабатывает объекты с одинаковыми координатами. Нужно придумывать свою обработку.

Можно также рисовать "розочку" как в я.адресах.
А куда копать по поводу розочки, что за алгоритм?
Алгоритм несложный.

Если некоторый набор объектов попадает в одну точку (это может быть либо точное совпадение координат, либо другой фактор близости), то при выводе вы смещаете их в спираль.

Например, можно сделать такую функцию:

function drawRose (map, placemarks) {
    var geoPoint, point;
    for (var i = 0, l = placemarks.length; i < l; i++) {
        if (i) {
            geoPoint = placemarks[i].getGeoPoint();
            point = map.converter.coordinatesToMapPixels(geoPoint);
            point.moveByX(Math.sin(Math.PI * 2 / 15 * (l - i)) * 20);
            point.moveByY(Math.cos(Math.PI * 2 / 15 * (l - i)) * 20);
            geoPoint = map.converter.mapPixelsToCoordinates(point);
            placemarks[i].setGeoPoint(geoPoint);
        }
        placemarks[i].setOptions({ zIndex : l - i });
    }

    return placemarks;
}

Использовать примерно так:

var placemarks = [];
for (var i = 0; i < 20; i++) {
    placemarks.push(new YMaps.Placemark(map.getCenter()));
}

var group = new YMaps.GeoObjectCollection();
group.add(drawRose(map, placemarks));
map.addOverlay(group);
о, спасибо

Для api.2 как тоже самое будет выглядеть?

Видимо да. Список в балуне - то что надо.


Спасибо.

тоже интересует как отобразить подобные метки "розочкой"
Примерный алгоритм я дал в другом комментарии.