Клуб API Карт

Размер Тайла

an-d-r-ej
21 ноября 2012, 01:49

Решил поиграться с размерами тайла.

var layer = ..................

 

 

Не смог я заставить работать 

layer.getTileSize = function (zoom) {

             return [512, 512];

        }

 

 

21 комментарий
Подписаться на комментарии к посту

А тайлы размера 512х512 у вас есть? :)

  А у вас нет?))

Любая картинка 512х512.

 

Функция заявлена - должна работать.

 

С помощью этого API - не только карты рассматривать можно...

И еще...

Есть у меня свои карты.

Хотел прибавить еще один зум, на котором картинки увеличены в два раза.

Вот при задании слоя - тайлы показывает 512, а функцией - не вышло.

 

надо попробовать через изменение опций.

Дайте ссылку на пример - посмотрим. Тяжело навскидку понять, почему функция не срабатывает.

я не храню не рабочие примеры в сети. зачем?

 

 

var layer = function () {return new ymaps.Layer(function (tile, zoom) {return 'http://vec04.maps.yandex.net/tiles?l=map&v=2.33.0&x=3&y=1&z=2&lang=ru_RU';},{projection: ymaps.projection.wgs84Mercator})};

ymaps.layer.storage.add('r#h', layer);

ymaps.mapType.storage.add('r#h', new ymaps.MapType('Пробная', ['r#h']));

 

layer.getTileSize = function (zoom) {

             return [512, 512];

}

 

Если сразу написать tileSize: [512, 512], то тайлы - в два раза больше.

 

я не храню не рабочие примеры в сети. зачем?

 

Если у вас чтото не работает нужна полная картина того что вы делаете, а не просто выдранный кусок кода.

К тому же это просто неуважительно по отношению к участникам клуба (почему кто-то должен создавать с вашим кодом страницу и выкладывать ее на сервер чтобы проверить где вы накосячили)

В группе гуглового АПИ, например, без ссылки сразу посылают.

 

Если нет возможности выложить код, разместите ваш пример на jsfiddle.net и дайте ссылку.

Не надо мой код "косячный" проверять.

я тут говорю - только о теории...

 

вы неверно переопределяете функцию.

var layer = function () {

var resultLayer = new ymaps.Layer(function (tile, zoom) {return 'http://vec04.maps.yandex.net/tiles?l=map&v=2.33.0&x=3&y=1&z=2&lang=ru_RU';},{projection: ymaps.projection.wgs84Mercator})

resultLayer.getTileSize = .....

return layer;

};

 

Спасибо.

нет, еще больше запутался.

пойду дерево поразглядываю...

 


Итак, вот что я наработал:

 

Если объявить слой так, как вы мне советовали. А именно:

var resultLayer = new ymaps.Layer(function (tile, zoom) {return 'http://vec04.maps.yandex.net/tiles?l=map&v=2.33.0&x=3&y=1&z=2&lang=ru_RU';},{projection: ymaps.projection.wgs84Mercator});

 

тогда - совершенно нормально переопределяется функция:

 

resultLayer.getTileSize = function (zoom) {

             return [512, 512];

        };

 

И слой добавляется на карту:

 

map.layers.add(resultLayer);

 

Но таким образом объявленный слой - совершенно невозможно добавить в control.TypeSelector

 

Пишу:

 

ymaps.layer.storage.add('r#h', resultLayer);

ymaps.mapType.storage.add('r#h', new ymaps.MapType('Пробная', ['r#h']));

Select = new ymaps.control.TypeSelector(['yandex#map', 'r#h']);

 

Кнопка есть, а толку с нее - никакого.

 

 

 

 

Зато объявленный, таким образом слой:

 

var resultLayer = function () {return new ymaps.Layer(function (tile, zoom) {return 'http://vec04.maps.yandex.net/tiles?l=map&v=2.33.0&x=3&y=1&z=2&lang=ru_RU';},{projection: ymaps.projection.wgs84Mercator})};

 

Совершенно нормально добавляется в control.TypeSelector:

 

ymaps.layer.storage.add('r#h', resultLayer);

ymaps.mapType.storage.add('r#h', new ymaps.MapType('Пробная', ['r#h']));

Select = new ymaps.control.TypeSelector(['yandex#map', 'r#h']);

 

но для него - совершенно невозможно переопределить функцию:

 

resultLayer.getTileSize = function (zoom) {

             return [512, 512];

        };

 

 

Вряд ли это мой косяк)))

var Layer = function () {

var resultLayer = new ymaps.Layer(function (tile, zoom) {return 'http://vec04.maps.yandex.net/tiles?l=map&v=2.33.0&x=3&y=1&z=2&lang=ru_RU';},{projection: ymaps.projection.wgs84Mercator});

resultLayer .getTileSize = function (zoom) {

             return [512, 512];

        };

return  resultLayer ;

};

ymaps.layer.storage.add('r#h',  Layer );

ymaps.mapType.storage.add('r#h', new ymaps.MapType('Пробная', ['r#h']));

Select = new ymaps.control.TypeSelector(['yandex#map', 'r#h']);

 

Я имела в виду такой вариант

Да. Спасибо большое.

Что-то я не догадался в туже функцию и функцию .getTileSize вставить.

 

Но я, все-же непонимаю, почему те 2 варианта не проскакивают. 

Но это - уже, скорее спортивный интерес...

Тут, как говорится, надо учить матчасть) Почитайте книги по JavaScript - и на этот вопрос ответ получите, и вообще прокачаетесь. Могу посоветовать Д. Фленаган Javascript: The definitive guide.

учеба, конечно дело нужное и хорошее. И много раз будет неправ, кто скажет, что он знает все. Но...

Давайте не будем все спихивать на мою безграмотность.

 

Вот что конкретно неграмотно в этом коде?

 

var Layer = new ymaps.Layer(function (tile, zoom) {return 'http://vec04.maps.yandex.net/tiles?l=map&v=2.33.0&x=3&y=1&z=2&lang=ru_RU';},{projection: ymaps.projection.wgs84Mercator});


resultLayer.getTileSize = function (zoom) {

             return [512, 512];

        };

ymaps.layer.storage.add('r#h', resultLayer);

ymaps.mapType.storage.add('r#h', new ymaps.MapType('Пробная', ['r#h']));

Select = new ymaps.control.TypeSelector(['yandex#map', 'r#h']);

 

Вообще по учебнику Карт написано.

Но не работает же кнопка в ТипСелекторе...

Вот должна, а не работает))))

var layer = function () {return new ymaps.Layer(function (tile, zoom) {return 'http://vec04.maps.yandex.net/tiles?l=map&v=2.33.0&x=3&y=1&z=2&lang=ru_RU';},{projection: ymaps.projection.wgs84Mercator})};

ymaps.layer.storage.add('r#h', layer);

ymaps.mapType.storage.add('r#h', new ymaps.MapType('Пробная', ['r#h']));

 

layer.getTileSize = function (zoom) {

             return [512, 512];

}

 

Прокомментирую этот код. Вы создаете функцию, которая создает объект класса ymaps.Layer и его же возвращает. Функция называется layer.

layer не является дочерним классом по отношению к классу ymaps.Layer.

Далее вы определяете функцию layer.getTileSize.

Объект, возвращаемый функцией layer, не имеет никакого отношения к этой функции и ее вызывать не будет. Будет вызываться метод класса ymaps.Layer.prototype.getTileSize.

Спасибо. Тут все понятно. Функция - не объект класса и глупо от нее что-то ждать.

Плод варварских экспериментов)))

Но я - про другое спросил. 

Повторюсь:

var Layer = new ymaps.Layer(function (tile, zoom) {return 'http://vec04.maps.yandex.net/tiles?l=map&v=2.33.0&x=3&y=1&z=2&lang=ru_RU';},{projection: ymaps.projection.wgs84Mercator});


resultLayer.getTileSize = function (zoom) {

             return [512, 512];

        };

ymaps.layer.storage.add('r#h', resultLayer);

ymaps.mapType.storage.add('r#h', new ymaps.MapType('Пробная', ['r#h']));

Select = new ymaps.control.TypeSelector(['yandex#map', 'r#h']);

 

тут то почему не хочет в тулбаре работать?

 

var Layer = new ymaps.Layer

вроде бы - объеткт ...

Сначала определена переменная Layer, а далее по коду фигурирует переменная resultLayer, которая нигде не определена

нет, нет...

это опечатка - именно в этом тексте. Пойду проверю на вск случай, чтобы голословным не быть.

 

Кстати... Вы - прородитель этой опечатки)))

Помните:

 

var layer = function () {

var resultLayer = new ymaps.Layer(function (tile, zoom) {return 'http://vec04.maps.yandex.net/tiles?l=map&v=2.33.0&x=3&y=1&z=2&lang=ru_RU';},{projection: ymaps.projection.wgs84Mercator})

resultLayer.getTileSize = .....

return layer;

};


))))

var Layer = new ymaps.Layer(function (tile, zoom) {return 'http://vec04.maps.yandex.net/tiles?l=map&v=2.33.0&x=3&y=1&z=2&lang=ru_RU';},{projection: ymaps.projection.wgs84Mercator});

Layer.getTileSize = function (zoom) {

             return [512, 512];

        };

ymaps.layer.storage.add('r#h',  Layer );

ymaps.mapType.storage.add('r#h', new ymaps.MapType('Пробная', ['r#h']));

Select = new ymaps.control.TypeSelector(['yandex#map', 'r#h']);

 

не работает кнопка в типселекторе...

Но по вашему варианту через функцию - все - работает, так что, как я и говорил интерес - чисто спортивный. Спасибо)))