Клуб API Карт

Соединение двух меток с помощью ломаной

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

Можно ли как то реализовать соединение двух меток с помощью ломаной.

Насколько я понимаю отобразить связь между метками можно с помощью класса ConnectedPlacemarrks, но он просто рисуют прямую линию между метками, а хочется соединить метки именно с помощью ломаной - объекта polyline

8 комментариев
Александр Новиков
28 января 2016, 07:46
А по какому принципу вы хотите рисовать ломаную линию? Чисто от балды задача решается без проблем - задаете количество отрезков, составляющих ломаную, а промежуточные точки генерируете случайным образом.
в идеале хочу чтобы в классе connectedPlacemarks был метод addConnection, который бы в качестве параметра принимал объект класса polyline, и достраивал эту ломаную двумя соединяемыми метками.
Вы можете хранить метки в группе, а потом при необходимости собирать координаты и строить ломаную.
// группа меток
var group = new YMaps.GeoObjectCollection();
map.addOverlay(group);

// Добавляем метки в группу
group.add(new YMaps.Placemark(new YMaps.GeoPoint(35, 55));

// Координаты меток
var points = [];
group.forEach(function (obj) {
    points.push(obj.getGeoPoint());
});

// Создаем ломаную
var polyline = new YMaps.Polyline(points);
map.addOverlay(polyline);

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

но кабели между местами соединия могут менять свое направления, скажем в телефонном колодце уходить из одной канализации в другую и делать поворот на 90 градусов.

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

Думаю, придется создать какой то отдельный объект и хранить эту информацию не использую api
А что вы хотите от этого нового объекта? Он должен хранить в себе набор меток и в случае необходимости через все них проводить ломанную? Или вы будете указывать индексы двух точек, через которую необходимо провести ломанную?
Второе.
Предположим, что у вас есть группу points, которая содержи в себе ваши метки.
var points = new YMaps.GeoObjectCollection();
Тогда вы можете просмот создать функцию, которая будет соединять точки с указанными индексами.
Например, вот такую:
function addConnection (points, from, to) {
    return new YMaps.Polyline([
        points.get(from).getGeoPoint(),
        points.get(to).getGeoPoint()
    ]);
};
Ну и соотвественно применять ее так:
map.addOverlay(addConnection(points, 1, 2));
спасибо