Клуб 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
5 ноября 2015, 17:55

Windows7, Google Chrome 46.0.2490.80 m

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

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

Smolensk.1812-2012
5 ноября 2015, 18:07

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

 

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

Smolensk.1812-2012
5 ноября 2015, 18:01

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

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

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

Поправил.

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

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

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

Smolensk.1812-2012
5 ноября 2015, 18:20

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



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

Smolensk.1812-2012
6 ноября 2015, 09:27

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

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

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

Smolensk.1812-2012
6 ноября 2015, 10:23

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

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

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

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

Smolensk.1812-2012
6 ноября 2015, 12:42

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

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

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

 

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

Smolensk.1812-2012
6 ноября 2015, 16:32

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

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

Smolensk.1812-2012
9 ноября 2015, 12:37

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

Smolensk.1812-2012
11 ноября 2015, 18:23

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

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

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

Smolensk.1812-2012
13 ноября 2015, 22:26

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

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

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