Клуб API Карт

Создание собственного слоя для определенного уровня зума

vakida
16 июля 2009, 23:46

Возможно ли используя YMaps.Layer создать слой для карты который будет отображаться только при определенном уровне приближения, т.е. грубо говоря, на уровне 6 вместо карты будет отображаться другая картинка, в то время как на уровнях 6 и 7 будет отображаться карта?

7 комментариев
Подписаться на комментарии к посту
Можно.

Например, обратимся к примеру из документации.

Когда Вы переопределяете метод getTileUrl, то можете добавить туда дополнительное условие. В итоге получим следующий код:

var myData = new YMaps.TileDataSource("http://mt.gmapuploader.com/tiles/FVSH1JsvdT/", true, true);
myData.getTileUrl = function (tile, zoom) {
    if (zoom == 3) {
        return this.getTileUrlTemplate() + "/tile-" + zoom + "-" + (tile.y * Math.pow(2, zoom) + tile.x) + ".jpg";
    }
}

В итоге на 3 масштабе поверх карты будет отображаться дополнительный слой.

Осталось этот слой добавить на карту:
map.addLayer(new YMaps.Layer(myData));

Можно поступить по-другому: слушать событие Update карты и когда будет необходимый масштаб, то добавляем слой, иначе удаляем его с карты:
var myLayer = new YMaps.Layer(myData);
YMaps.Events.observe(map, map.Events.Update, function () {
    if (map.getZoom() == 3) {
        map.addLayer(myLayer);
    } else {
        map.removeLayer(myLayer);
    }
});

В этом случае никаких дополнительных условие в методе getTileUrl прописывать не надо.
Спасибо. Подскажите, пожалуйста, по какому принципу создавать свои тайлы?
Советую почитать вот этот раздел:
http://api.yandex.ru/maps/jsapi/doc/dg/concepts/coordinates_systems.xml
Прочитал, про систему координат ясно, а про названия тайлов нет :(
Вы имеете ввиду какой урл формировать для получения тайлов?
Если да, то об этом можно почитать здесь:
http://api.yandex.ru/maps/jsapi/doc/ref/reference/tiledatasource.xml
На сколько я понял, нужно знать номер тайла который я хочу заменить? Допустим, у меня есть подробная карта города, которую я хочу наложить поверх Якарт начиная с какого-то масштаба, как мне ее нарезать, как узнать номера тайлов, в которых она должна отображаться для каждого масштаба и как узнать смещение внутри левого верхнего тайла относительно его угла? Есть ли готовые программы/инструменты для нарезки, чтобы брали картинку, масштаб и координаты л.в. угла, а возвращали готовую структуру папок с нарезкой?
Про нарезку тайлов можно почитать в этом посте.
Для работы с тайловыми координатами существует специальный класс - YMaps.TileCoordinates.