Клуб API Карт

Как сделать две синхронизированные карты с помощью нового API?

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

Т.е. при движении/изменении масштаба первой, должно то же самое происходить на второй? Естественно, на двух картах должны быть два разных типа карт - спутник и дороги, к примеру. Желательно, с возможностью увеличения количества карт в будущем, например, добавить карты со слоями OSM, Navitel, Google.

5 комментариев
Sergey Konstantinov
27 января 2016, 22:38
Если две карты чем-то отличаются — масштабом и типом карты, в частности — то проще всего просто по таймауту синхронизировать.

нет, хотел бы именно абсолютно одинаковые масштаб, зум, размер, но разные подложки

С Гугл вам придется не только карты, но и несколько разных АПИ синхронизировать, т.к. тайлы Гугл можно показывать только через АПИ Гугл. То же относится и Яндексу, и думаю, Навителу

да ладно, это потом :) как хотя бы две карты яндекса одинаково отображать?

я видел пример, когда в ссылку вставляли координаты, зум, потом парсили обратно, но всё это было на 1 апи. Здесь делать по тому же принципу надо?

Всеволод Шмыров
27 января 2016, 22:38
Это не очень тривиальная задача. Вам нужно использовать события actionbegin, actiontick и actionend.

По событию "actionbegin" нужно удалять подписку на "actionbegin" второй карты, чтобы не возникло бесконечной рекурсии. Там же произвести подписку на actiontick и actionend первой карты. По событию "actiontick" нужно брать состояние действия при помощи event.get('tick'); и задавать его второй карте.
var currentMapState = event.get('tick');
anotherMap.setGlobalPixelCenter(
    currentMapState.globalPixelCenter,
    currentMapState.zoom, {
        duration: currentMapState.duration
    }
);

А по событию actionend возвращать как все было. Удалять подписки на actiontick и actionend первой карты и возвращать подписку на actionbegin второй