Клуб API КартКак разместить canvas на картеПост в архиве.nolan2324 апреля 2012, 16:32Насколько я знаю, графическое ядро спрятали, и функций к доступу контейнеров нет.куда копать? layer.tileContainer.DomContainer?
15 комментариевАвторизуйтесь, чтобы оставить комментарийSergey Konstantinov28 января 2016, 04:57Поясните подробнее, что вы хотите сделать?nolan2328 января 2016, 04:57Я хочу выводить слой с отрисованными на канвасе метками.этот слой отрисовывается потайлово на клиенте .thekashey28 января 2016, 04:57у DomContainer есть опция tileClass, его и можно перегрузить своим, так чтобы он реализовывал IDomTilenolan2328 января 2016, 04:57 слой подхватывается, тайл - нетvar MyDomTile = function(url) {this.tile = null;this.ready = false;this.events = null;this.destroy = function() {if (this.tile && this.tile.div){this.tile.div.remove() ;};};this.isReady = function() {return this.ready;};this.renderAt = function(context, clientBounds, animate){alert('render') ;};} ;this.layer = new ymaps.Layer('%c', {tileTransparent : true}) ;this.container = new ymaps.layer.tileContainer.DomContainer(this.layer, {class : MyDomTile}) ;this.map.layers.add(this.layer) ;nolan2328 января 2016, 04:57кстати, в документации:Функция-шаблон получает на вход три параметра: tileNumber - массив из двух чисел, номера тайла по x и y; tileZoom - уровень масштабирования; Возвращает строку-URL. таки 2?thekashey28 января 2016, 04:57таки два. Первый массив из двух чисел, второй - зум.Больше вроде бы не и требуется.thekashey28 января 2016, 04:57опция называется tileClassnolan2328 января 2016, 04:57все равно не подхватывает.пытается загрузить картинки.даже конструктор не срабатывает mari-na-bzzz28 января 2016, 04:57Почитала сейчас документацию - там неоднозначное описание Layer.На самом деле обстоит все так.Layer сам инстанцирует layer.tileContainer.DomContainer внутри себя.И выставляет свои опции родительскими для DomContainer.В результате можно и нужно задавать опции для DomContainer через экземпляр слоя.В вашем примере создается отдельно контейнер и отдельно слой, которые между собой никак не связаны. Поэтому опции до слоя и не доходят.Правильно так:this.layer.options.set('tileClass', MyDomTile);nolan2328 января 2016, 04:57спасибо, почти все получилось!скорость просто замечательная. удалось значительно снизить время отрисовки.осталась одна проблема:вероятно из-за анимации мои тайлы не удаляются с карты. функцию destroy я почти полностью передрал с вашей.this.destroy = function() {if (this.content && this.content.parentNode){this.content.parentNode.removeChild(this.content);}this.content = null;};такое ощущение, что перед срабатыванием деструктора элементы вынимаются из dom (parentNode = null), но остаются в кэше (сам элемент существует). mari-na-bzzz28 января 2016, 04:57Тут уже какие-то баги в вашей собственной реализации. Почему они возникают, из одного деструктора понять невозможно.nolan2328 января 2016, 04:57деструктор вызывается для предпоследнего зума. то есть после зума 10-11-12 удаляются только 10 зум. 11 и 12 видны.а как убрать предыдущий? Sergey Konstantinov28 января 2016, 04:57Если тайлы непрозрачные, то после масштабирования предыдущий слой тайлов не удаляется, пока грузятся новые тайлы. Вероятно, дело в этом.Если хотите отключить этот механизм - поставьте слою опцию tileTransparent: truenolan2328 января 2016, 04:57да, действительно, transparent...теперь смешно получается - http://maps.1cs.su/index.html?mapMode=1&tileMode=0an-d-r-ej28 января 2016, 04:57спасибо большое.Очень интересная темка. в вашей реализации не учтен один момент...При выводе на экран ошибочного тайла (это те, которые за приделами карты).функция MyDomTile - начинает разбирать на массив строку url, значение которой - null.пойду поиграюсь с notFoundTile и tileTransparent.Но у вас - tileTransparent - необходимое условие - прозрачные. (для удаления тайлов после изменения зума).Если, даже и выйдет подсунуть нужную строку в notFoundTile, то проверку в MyDomTile - все равно делать нужно...