Клуб API Карт

Ограничить область карты

greendumb
23 сентября 2010, 12:16

Добрый день!

Подскажите пожалуйста, можно ли и как ограничить видимую область карты (чтобы не могли двигаться дальше ограниченной зоны), например такой области:

YMaps.GeoBounds(new YMaps.GeoPoint(34.002441,44.898746), new YMaps.GeoPoint(34.196761,45.024033) )

Заранее благодарен!

6 комментариев
Подписаться на комментарии к посту
слушайте какое-нибудь из событий карты и реагируйте если надо.
вешаетесь на событие сдвига карты, если граница выходит за заданые пределы - двигаете обратно.
Чтобы работало четко и без "рывков" прийдется малек подумать.
В простейшем случае это можно сделать следующим образом:

YMaps.jQuery(function () {
    var map = new YMaps.Map(YMaps.jQuery("#YMapsID"));
    map.setCenter(new YMaps.GeoPoint(37.64, 55.76), 10);

    var strictBounds = new YMaps.GeoBounds(new YMaps.GeoPoint(37.145122,55.395549), new YMaps.GeoPoint(38.231532,56.089651));
    strictMapBounds(map, strictBounds);
})

function strictMapBounds (map, strictBounds) {
    var center = map.getCenter();

    YMaps.Events.observe(map, map.Events.Move, function (map, e) {
        var bounds = map.getBounds(),
            lb = bounds.getLeftBottom(),
            rt = bounds.getRightTop();

        if (!strictBounds.contains(lb) || !strictBounds.contains(rt)) {
            map.setCenter(center);
        } else {
            center = map.getCenter();
        }                                                                                                                                                                         
    });
}

Эта функция учитывает только перемещение карты, но игнорирует событие изменения масштаба. По аналогии вы можете дописать эту функцию и получить желаемый функционал.
Спасибо большое! для начала мне вполне подойдет такое решение

да оно толком нерабочее, браузер начинает дико тормозить,


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

было бы приятно увидеть такую функцию в API Yandex Maps