Клуб API Карт

Странности при создании своего слоя для карты

Пост в архиве.

Реализовывал поддержку "картиночных слоев" в своих расширениях, наткнулся на некоторое непонимание в работе (может баг, может неверный вызов).

Итак, берем за основу построение слоя OSM

 
osmMapType = function () { return new ymaps.Layer(
'http://tile.openstreetmap.org/%z/%x/%y.png', {
    projection: ymaps.projection.sphericalMercator
});
};
ymaps.mapType.storage.add('osmMapType', new ymaps.MapType(
    'OSM',
    ['osmMapType']
));

 
customMapLayer1 = new ymaps.Layer(
'', {
  projection: ymaps.projection.sphericalMercator
, tileSize: [256,256]
, tileTransparent: false
});
customMapLayer1.getTileUrl = function (tile, zoom) {
return "http://tile.openstreetmap.org/"+zoom+"/"+tile[0]+"/"+tile[1]+".png";
}
customMapType1 = function () { return customMapLayer1;};
ymaps.mapType.storage.add('customMapType1', new ymaps.MapType(
    'Test OSM 1',
    ['customMapType1']
));
ymaps.layer.storage.add('customMapType1', customMapType1);

 
customMapLayer3 = new ymaps.Layer(
'', {
  projection: ymaps.projection.sphericalMercator
, tileSize: [256,256]
, tileTransparent: false
});
customMapLayer3.getTileUrl = function () {
return "http://tile.openstreetmap.org/%z/%x/%y.png";
}
customMapType3 = function () { return customMapLayer3;};
ymaps.mapType.storage.add('customMapType3', new ymaps.MapType(
    'Test OSM 2',
    ['customMapType3']
));
ymaps.layer.storage.add('customMapType3', customMapType3);
 

Хотя в документации и написано, что можно функции без параметров
Вот здесь есть примеры вызова
http://api.yandex.ru/maps/doc/jsapi/2.x/ref/reference/Layer.xml#constructor-summary

Т.е. не работает вариант, когда getTileURL я переопределяю функцией без параметров.

 

4 комментария
Владислав Турман
28 января 2016, 02:36

в третьем варианте не понятно, зачем вы тогда вызываете getTileUrl , если моржно сразу вписать его в ymaps.Layer

Данная функция имеет смысл если вам надо задавать тайлы в зависимости от параметров номера тайла и зума, а если у вас прямой урл с тремя переменными зум х и у, то пишите его сразу в урл.


Возможно я не прав, н оу меня так и работает.

Я привел пример с OSM, а если у меня есть своя функция, и это, например не просто одна строчка, а нормальная такая :)

Я же в примере 2 сделал такое присвоение. Только параметры указал.

А в яндекс-примерах аргументы у функции не прописаны (чаще). Вот и вопрос - в примере не прописано, я воспроизвел - не прокатывает.

Прокатывает при явном указании аргументов функции

Вы переопределяете метод getTileUrl, а внутренности у него как для функции getTileUrlTemplate.

Переименуйте метод в getTileUrlTemplate и все заработает.

Ага, вроде проясняется. Спасибо.