Клуб API Карт

14 комментариев
Всеволод Шмыров
27 января 2016, 23:56
Добрый день. Вы же сами предоставили пример. По событию click ссылки нужно вызывать метод setCenter у карты с координатами, которые были привязаны к ссылке.

В блоге мы делились статьей, в ней есть примеры реализации такого центрирования

Сервис закрывается и вступить в клуб я уже не могу, зато могу комментировать.
Хотел задать вопрос по теме выше, связанный с зависанием карты, возможно вы сможете подсказать, как с этим бороться

у меня на карте добавлено ~70 геообъектов (добавлены через  myMap.geoObjects.add, все балуны используют пользовательские макеты )
Все работает корректно, но на мобильных (пробовали на несколькольких топовых андроидах (chrome) и айфоне), при выполнении 
myMap.setCenter([44.89980, 37.347006],17, { checkZoomRange: true }); 

карта подвисает. В песочнице пробовал повторять - не повторяется. Периодически она проявляется небольшие признаки жизни (спустя секунд 15-20 есть подвижки в заданные координаты), но работать с вкладкой уже не возможно - нужно открывать ее заново. перезагрузка вкладки тоже не помогает. 

на нексусе 5м , с подключенным режимом отладки:
карта работает, метки открываются при нажатии. Если в консоли выполнить код указанный выше - зависнет.  Если указывать зум 14-15, то признаки жизни будут хоть какие-то, но тормоза присутствуют жуткие.

В какую сторону хоть смотреть..


 

Всеволод Шмыров
27 января 2016, 23:56
Спасибо за сообщение. Определим в чем может быть проблема. Могли бы вы скинуть страницу с ошибкой?

оформил в отдельную страницу:

http://barausse.archidev.ru/test.php

Там инициализируются маркеты, после этого таймаут на 10 секунд и выполнится myMap.setCenter

Если на компе - то все норм. Если на телефоне - карта вешается. Если машстаб поставить 12 , а не 17 - не вешается.

Если не определеить ни одной метки (геообъекта), то не вешается. Если хотя бы парочку - повесится.

 

Всеволод Шмыров
27 января 2016, 23:56
Проверил на нескольких устройствах и не смог воспроизвести. Можете подробнее описать условия возникновения. Ошибка появляется только в режиме отладки? На каких версиях Android и iOS проверялось?
Всеволод Шмыров
27 января 2016, 23:56
Ошибка возникает только с включенной отладкой?

Собрал все в 1 комментарий:

- без отладчика тоже возникает

 

Не возникает:

 - win7x64/chrome - все ок

 - ipad3 , ios7, safari - все ок

 - nexus 5 + firefox 30.0 - все ок 

 - так же, если  в myMap.setCenter указать масшбат 12 , а не 17

 - так же, если не инициализировать объекты (не вызывать InitMarkers();)

 

 

Возникает:

 - nexus5 (android 4.4.4, без прошивок, chrome 36.0.1985.128) - виснет

 - Samsung Galaxy S III (GT-I9300) (Android 4.4.4, CyanogenMod, Chrome 35.0.1916.122) - появляется лого яндекса (как когда карта еще не загружена) и подвисает.

 - sony xperia z, android 4.4.2, chrome 35.0.1916.141 - виснет

 

по ссылке (barausse.archidev.ru/test.php, настройка карты лежит в http://barausse.archidev.ru/bitrix/templates/barausse/js/map-bug.js): 

 

там идет инициализация маркеров (как создаются геообъекты можно смотреть в фукции SetNewPoint() )

дальше таймаут и выполняется 

 

setTimeout(function() {

            console.log('вешаем карту');

            myMap.setCenter([44.89979657743778, 37.347005903720856], 17, { checkZoomRange: true }); }

        , 10000);

координаты роли не играют. просто при тестировании карты обратили внимание, что вешается карта на телефонах. долго искал на каком этапе - методом тыка определил, что при вызове myMap.setCenter

Всеволод Шмыров
27 января 2016, 23:56
Спасибо. Будем дальше смотреть.

Добрый день. У вас так и не воспроизвелась проблема?

Всеволод Шмыров
27 января 2016, 23:56
Добрый день. Воспроизвелась. Исследуем.
Всеволод Шмыров
27 января 2016, 23:56
Посмотрели проблему.
Эта ошибка очень похожа на http://clubs.ya.ru/mapsapi/25146/25205#reply-mapsapi-25205
Только при выставлении огромных координат элементам они не пропадают, а вызывают фриз браузера. Эта проблема будет устранена в следующем релизе.
К сожалению, с вашей стороны её сейчас не получится решить без изменения кода создания геообъектов. Могу предложить вам скрыть геообъекты при их выходе за пределы видимой области. По умолчанию, такое поведение не было реализовано в геообъектах. Но оно есть в кластеризаторе и в ObjectManager.

В первом случае нужно будет настроить кластеризатор так, чтобы метки не схлопывались (опциями minClusterSize, maxZoom или groupByCoordinates)
http://api.yandex.ru/maps/doc/jsapi/2.1/ref/reference/Clusterer.xml

Примеры в песочнице
http://api.yandex.ru/maps/jsbox/2.1/clusterer_create

А с ObjectManager нужно будет описать геообъекты в специальном JSON формате.
http://api.yandex.ru/maps/doc/jsapi/2.1/ref/reference/ObjectManager.xml

Примеры в песочнице
http://api.yandex.ru/maps/jsbox/2.1/object_manager

Понятно, спасибо за ответ!

Подскажите, а после закрытия сервиса блогов - куда переедит клуб api яндекс карт? 

Всеволод Шмыров
27 января 2016, 23:56
Клуб "API Яндекс.Карт" не переедет и будет доступен по тому же адресу.