Клуб API Карт

Обновление API Яндекс.Карт версия 2.1.31 "поломало" мою пользовательскую карту

Smolensk.1812-2012
5 ноября 2015, 17:14

Обновление API Яндекс.Карт версия 2.1.31 "поломало" мою пользовательскую карту.

Реализована в версии 2.1.

Полигоны, собранные в коллекции начинают показываться только на очень больших масштабах. Но даже при больших масштабах изображаются не все, при чем часть из них с нарушением формы. 

Подскажите пожалуйста, что принципиально изменилось, в каком направлении править код скрипта.

Адрес страницы: Смоленское сражение 1812 на Карте яндекса

20 комментариев
Уточните браузер и ОС, пожалуйста. В Хроме и Firefox проблем не замечено.
На всякий случай, версия 31 у вас не используется (подключается 29) и «поломать» ваш сайт она не могла.
Smolensk.1812-2012
27 января 2016, 22:17

Windows7, Google Chrome 46.0.2490.80 m

Поведение должно быть (и было) как у версии, реализованной на API 1.1

Генерируется случайный начальный масштаб и центр карты. Объекты карты видны практически на любом масштабе. А я вижу вот такое http://joxi.ru/zAN04ZpsQzgOm9 

Smolensk.1812-2012
27 января 2016, 22:17

У Вас показывает как и задумано. 

 

Если эта проблема замечена в  Chrome под Windows, то это известный баг браузера Chrome https://code.google.com/p/chromium/issues/detail?id=543583

Smolensk.1812-2012
27 января 2016, 22:17

Будьте так любезны, поправьте ссылочку почитать про баг Хрома, а то она хочет меня через yandex-team направить 

 https://h.yandex-team.ru/?https%3A%2F%2Fcode.google.com%2Fp%2Fchromium%2Fissues%2Fdetail%3Fid%3D543583 

Давно ли баг известен? В Хроме карту сочинял и в нем же тестировал. А проблема вылезла сегодня. 

Поправил.

У вас совсем полностью софтварный рендер. На нем в полной мере проявляется баг хрома, что описан выше.

Можно узнать что у вас за компьютер - честно думал что таких не должно уже остаться - апаратное ускорение уже много лет шагает по планете.

Как решить проблему с вашей строны "надежно" - переведите геометрию полигонов в режим fillRule:'nonZero', или не используйте мультиполигоны - разбейте их на отдельные;

Smolensk.1812-2012
27 января 2016, 22:17

Машина Intel(R) Core(TM) i7-3770 CPU © 3.40GHz 3.40 GHz \ Intel(R) HD Graphics 4000



А покажите  ваш chrome://gpu

Smolensk.1812-2012
27 января 2016, 22:17

Скопировал мой chrome://gpu сюда https://yadi.sk/i/BEfawNH6kGGfi 

Странно - на приборах все окей.

В общем сейчас поправить проблему можно только выключив "дырочность" полигонов, которая вам и не нужна. fillRule или один контур на обьект.

Smolensk.1812-2012
27 января 2016, 22:17

Дома на более старой машине такой же chrome://gpu.

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

Буду пробовать предложенное Вами лекарство. 

Спасибо Вам и всем, кто откликнулся. 

Smolensk.1812-2012
27 января 2016, 22:17

Уважаемый Антон, с Вашего позволения еще вопрос напоследок.

Не могу сообразить, есть ли возможность как-то централизовано указать режим fillRule:'nonZero' для полигонов в уже имеющемся коде? 

Или придется отказаться от использования вспомогательного класса Polygon и переписывать весь код, создавая геообъекты type: "Polygon" и каждому указывать fillRule:'nonZero'?

 

Можно коллекции задать

Smolensk.1812-2012
27 января 2016, 22:17

Смысл понятен, но что-то не получается. Можете примером намекнуть?

myMap.geoObjects.options.set('fillRule', 'nonZero');

Smolensk.1812-2012
27 января 2016, 22:17

Красиво, но не работает :(

Smolensk.1812-2012
27 января 2016, 22:17

Попытался выключить "дырочность" полигонов для всех нарисованных мною геообъектов оптом - не справился. Также не получилось выключить для коллекции полигонов. Пошел по пути рутинному, задаю каждому полигону правило fillRule (на странице пока не видно результата, т. к. отлаживаю на тестовом сервере). 

Обнаружил, что обновленный Хром (46.0.2490.80 m) также неверно изображает пересечение внешнего и внутреннего контуров полигона в примере из "Песочницы".

Как добиться, чтобы это пересечение контуров было "прозрачным"?

Smolensk.1812-2012
27 января 2016, 22:17

Отвечу сам себе, может кому-нибудь пригодится. 

Такая же проблема с внутренними контурами обозначена в теме "В Chrome неверно происходит заливка многоугольников при наличии пересекающихся сторон. Что делать?" (10 ноября, 14:07)

Поскольку ждать релиз Хрома, который исправит ситуацию, неинтересно, то на своей карте все полигоны с внутренним контуром перечертил в мультиполигоны и задал правило fillRule:'nonZero'.