Клуб API Карт

как сместить тайлы?

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

Есть карта нарезанная на тайлы, она в проекции sphericalMercator, но есть проблема - она немного не точно привязана (перепривязать не вариант - тайлов много и они такие какие есть). Вопрос - как внести поправку в проекцию для этого слоя, чтобы он немного сдвинулся?

5 комментариев
Sergey Konstantinov
28 января 2016, 04:34

Сделать свою проекцию, которая смещена относительно Меркатора на нужный сдвиг.

в этом и вопрос - как ее сделать

буду благодарен за приемр кода, не могу разобраться

реализуете интерфейс IProjection http://api.yandex.ru/maps/doc/jsapi/2.x/ref/reference/IProjection.xml

либо, наверное, можно даже вот так сделать:

var delta = [ 1212, 12121];

myProjection = {

'fromGlobalPixels' :  function(globalPixelPoint, zoom) {

      var result = ymaps.projection.sphericalMercator.fromGlobalPixels.( globalPixelPoint, zoom );

result[0] += delta[0];

result[1]+= delta[1];

return result;

},

остальные методы

}

можно элегантнее - сделать свою проекцию потомком ymaps.projection.sphericalMercator и внутри методов вызывать методы суперкласса типа так:

function extend(Child, Parent) {

    var F = function() { };

    F.prototype = Parent.prototype;

    Child.prototype = new F();

    Child.prototype.constructor = Child;

    Child.superclass = Parent.prototype;

}

extend(myProjection, ymaps,projection.sphericalMercator);

var result = myProjection.superclass. fromGlobalPixels .apply(this, arguments);


потом в опциях карты прописываете projection

 

var myMap = new ymaps.Map('map', { center: [55.74954, 37.621587], zoom: 10, }, { projection: myProjection);

 

чтобы не плодить велосипедов - аналог extend в АПИ называется augment

спасибо, буду разбираться