Клуб API Карт

Удаление слоя активных областей

Пост в архиве.
gordvm
24 августа 2010, 07:18

Здравствуйте, разбирался с этим  примером (ссылка) и возник вопрос как изменить источник тайлов.

При создании нового экземпляра YMaps.TileDataSource источник дополняется, а не изменяется.

 

Мне нужно полностью удалить источник и добавить новый или заменить существующий.

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




источник дополняется


 В переводе на нормальный язык это оба источника отображены на карте?

Если вы разбирались с примером, значит знаете как добавить источник на карту. Почему возникает вопрос как его убрать или обновить мне не понятно.







как добавлять понятно, а вот как удалять нет.
Метод rremoveAllOverlays не помогает.


$.getJSON('search/ajax',
        get,
        function(data) {
            tags = new Array();
            json = data.json;
            search_layers = data.layers;
            
            function processTemplate (template, tile, zoom) {
                return template.replace(/%x/ig, tile.getX()).replace(/%y/ig, tile.getY()).replace(/%z/ig, zoom);
            }


            var ds = new YMaps.TileDataSource(search_layers.directory + search_layers.name+'/png/%z/tile-%x-%y.png', 1, 0);
            
            ds.getTileUrl = function (tileNumber, zoom) {
                return processTemplate(
                    YMaps.TileDataSource.prototype.getTileUrl.call(this, tileNumber, zoom),
                    tileNumber,
                    zoom
                );
            };
            
            iLayer = new YMaps.Layer(ds);
            
            // Добавляем "картиночный" слой на карту
            layers.map.addLayer(iLayer);


            // Источник тайлов с описаниями активных областей
            os = new YMaps.Hotspots.ObjectSource(search_layers.directory + search_layers.name+'/js/%z/tile-%x-%y.js', search_layers.name+'-%x-%y-%z');
            os.getTileUrl = function (tileNumber, zoom) {
                return processTemplate(
                    YMaps.Hotspots.ObjectSource.prototype.getTileUrl.call(this, tileNumber, zoom),
                    tileNumber,
                    zoom
                );
            };
            
            os.getKey = function (tileNumber, zoom) {
                return processTemplate(
                    YMaps.Hotspots.ObjectSource.prototype.getKey.call(this, tileNumber, zoom),
                    tileNumber,
                    zoom
                );
            };
         
            // Добавляем слой активных областей на карту
            var hLayer = new YMaps.Hotspots.Layer(os);
            layers.map.addLayer(hLayer);
        }
    );
Прошу прощения за большой код.
А зачем Вам нужно менять DataSource? Вы хотите изменить шаблон URL тайла?

В таком случае Вам нужно сделать примерно так:

os = new YMaps.Hotspots.ObjectSource('/js/%z/tile-%x-%y.js', search_layers.name+'-%x-%y-%z');

os.getTileUrl = function (tileNumber, zoom) {

                return (search_layers.directory + search_layers.name + processTemplate(
                   YMaps.Hotspots.ObjectSource.prototype.getTileUrl.call(this, tileNumber, zoom),
                    tileNumber,
                    zoom
                );


            };

Тогда достаточно будет после изменения переменных search_layers.directory и/или search_layers.name достаточно вызвать метод update, и все тайлы перерисуются.
скобку забыл, должно быть )); в предпоследней строке
Ну и с TileDataSource, аналогично.
Спасибо, работает!!!