Клуб Народной карты

Автоматическое переключение на Народную карту в API Яндекс.Карт

В марте Народная карта стала новым слоем на Яндекс.Картах. Если нет подробной схемы какого-нибудь города, при приближении карты вы автоматически переключаетесь на «народный» слой.

В API Яндекс.Карт пока нет такой возможности, и в клубе разработчиков часто спрашивают, как реализовать переключение в своем проекте.  и  написали и выложили пример, который поможет вам быстро сделать «проваливание» в Народную карту у себя на сайте.

Код на гитхабе.

Посмотреть пример в новом окне.

Надеемся, это многим поможет и упростит разработку!

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

В исходном виде пример не работает при наличии переключателя типа (у меня это Схема/Спутник).

У меня получилось это исправить, дописав в addToMap/removeFromMap подписку/отписку на 'typechange', и добавив в AutoSwitcher методы

 

 

        /**

         * Handle map type change.

         * @function

         * @name AutoSwitcher.updateType

         */

        updateType: function (event) {

            var type = event.originalEvent.newType;

 

            if (type === 'yandex#satellite') {

                this.typeIsSat();

            } else {

                this.typeIsMap();

            }

        },

 

        /**

         * Change to satellite mode.

         * @function

         * @name AutoSwitcher.typeIsMap

         */

        typeIsMap: function () {

            this.update();

            this.map.events.add('boundschange', this.update, this);

        },

 

        /**

         * Change to map/publicMap mode.

         * @function

         * @name AutoSwitcher.typeIsSat

         */

        typeIsSat: function () {

            this.map.events.remove('boundschange', this.update, this);

            this.switchLayer(this.layers['sat']);

        }

 

 

 

 

А еще заявленный в документации метод ymaps.mapType.getName() почему-то отсутствует. В консоли ymaps.mapType имеет только одно свойство storage

http://api.yandex.ru/maps/doc/jsapi/2.x/ref/reference/MapType.xml#getName

А покажите, что получилось-то в итоге? Сайт уже работает?

В итоге все работает:
http://ostrovok.ru/hotels/?region_id=5523&destination=Кисловодск,+Россия&nodates=true&room1_numberOfAdults=2&room1_numberOfChildren=0&room1_child1Age=1&room1_child2Age=1&room1_child3Age=1&room1_child4Age=1#tab=map

 

Прошу прощения, что так долго - выложиться никак не могли.

 

Возникла еще проблема:
если карту уничтожить и создать заново с уровнем зума, относящимся к Народной карте, то слой Народной карты не накладывался (при использовании AutoSwitcher как синглтона - так zoomRange слоев кэшируется, и не приходится каждый раз ждать и наблюдать мигание обычной карты перед автопереключением на Народную).

Получилось исправить, дописав в removeFromMap:

this.currentLayer = null;


Посмотреть можно здесь (происходит при переключении вкладок "Список"/"Карта"):

http://ostrovok.ru/hotels/special/info/330925220/?region_id=5523&destination=Кисловодск&room1_numberOfAdults=2&cur=RUB#tab=map

У вас еще по ссылке http://ostrovok.ru/hotels/?region_id=5523&destination=Кисловодск%2C+Россия&nodates=true&room1_numberOfAdults=2&room1_numberOfChildren=0&room1_child1Age=1&room1_child2Age=1&room1_child3Age=1&room1_child4Age=1#tab=map карта открывается изначально без наших копирайтов :-( Причем если после загрузки страницы изменить размер окна браузера, копирайты появляются.

Можете поправить? Нужно вызывать метод map.container.fitToViewport после измения размеров блока карты.

Я хотела Ваш сайт в примеры на сайт API добавить, но пока не могу из-за копирайтов :-(

Копирайты есть, но карта ресайзится неправильно, и их не видно. Поправлю в ближайшее время.

 

Пока - вот, можете в пример поставить эту страницу)
У вас из-за AutoSwitcher двоится копирайт, особенно это заметно при любом изменении уровня зума:

http://ostrovok.ru/hotels/special/info/162026555/?region_id=5523&destination=Кисловодск&room1_numberOfAdults=2&cur=RUB#tab=map 

> У вас еще по ссылке ... карта открывается изначально без наших копирайтов

 

Вроде, теперь все ок с копирайтами

Работаю над этим.

 

У вас ошибка в документации:

http://api.yandex.ru/maps/doc/jsapi/2.x/ref/reference/control.MapTools.xml

 

В примере

 

var mapTools = new ymaps.control.mapTools({ items: {[ ... ]}});

 

должно быть

 

var mapTools = new ymaps.control.MapTools({ items: [ ... ]});

 

Спасибо большое. Поправим.

Не могу поймать... Какая у вас ОС, какой это браузер?

Mac OS 10.7, Safari 6.0