Клуб API Карт

видимость Layer'a

Пост в архиве.
yegor-l
5 апреля 2010, 22:49

Для быстрого переключения между Схемой и своей картой поставил чекбокс, т.к не нашёл в АПИ правильного способа, и повесил на него функцию:

 

function layerVis(m_id){
    if ($("#ch"+m_id).attr("checked")){
        $(".YMaps-map-type-layer-container :gt(0)").css("display","");
        map.redraw(false);
    }else{
        $(".YMaps-map-type-layer-container :gt(0)").css("display","none");
        map.redraw(false);
    }
}

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

Подскажите, как сделать идеологически правильно или в чём я неправ?

14 комментариев
Идеалогически лучше делать через добавление\убавление слоев карты
Подскажите, пжста, как узнать текущий тип карты?
getTypes() если я правильно понял, возвращает вообще все доступные на данной карте типы.
firebug сообщает что
YMaps.MapType.getType is not a function
код вот такой:
var
myMapType = YMaps.MapType.getType();
var mapLayers = myMapType ?
myMapType.getLayers() : [],
            newMapType = new
YMaps.MapType(YMaps.jQuery.merge(mapLayers, [ "my#layer_"+mapname ]),
mapname, {textColor: "#000000"});
но если сделать так: var myMapType = YMaps.MapType.MAP;
то работает.
getType() - это метод класса YMaps.Map
может я конечно какие-то очевидные спрашиваю, но я не очень понял что Вы хотели этим сказать.
как мне вместо жёсткого указания
var myMapType = YMaps.MapType.MAP;
получить сюда текущий тип карты?
Поясню на примере:
var map = new YMaps.Map(document.getElementById("YMapsID"));
map.setCenter(new YMaps.GeoPoint(1, 1));

var currentType = map.getType();
спасибо!
а ведь когда-то я уже спотыкался на этом.

map.getType() выдает мне "object Object" и ничего из этих данных не извлеч. Как же все-таки получить идентификатор карты

 

getType

 

{YMaps.MapType} getType()

 

Возвращает текущий тип карты.

Возвращает:

 

ТипОписание
YMaps.MapTypeТекущий тип карты.

Нажимаем на MapType:

Методы

 

ИмяВозвращаетОписание
getLayers()String[]|YMaps.ILayer[]Возвращает список слоев, входящих в тип карты.
getMaxZoom()IntegerВозвращает максимальное значение коэффициента масштабирования.
getMinZoom()IntegerВозвращает минимальное значение коэффициента масштабирования.
getName()StringВозвращает имя типа карты, отображаемое в переключателе типов YMaps.TypeControl.
getTextColor()StringВозвращает цвет текста. Этот цвет применяется к тексту копирайтов.
setName(name) Задает новое имя типа карты.
layersString[]|YMaps.ILayer[]  Список слоев, входящих в тип карты. Слой может быть задан как ключом, так и указателем на экземпляр слоя. Если какой-то тип планируется использовать в нескольких картах одновременно, то для каждого слоя карты такого типа необходимо создать отдельный класс, поместить его в хранилище YMaps.Layers, а в параметре layers указать ключ, под которым класс слоя был помещен в хранилище.
nameString  Имя типа карты. Отображается в переключателе типовYMaps.TypeControl.

Андрей, я читал, я в курсе этой информации, но

alert(map.getType()) ;

выдает "object Object", и это не то, что мне надо.

Оно выдает объект. Как раз он Вам и нужен.

Какой объект и какими методами он обладает я указал.
За Вами лишь выбор, какой метод использовать.

к примеру:

 

map.getType().getName();


Пробуйте не просто читать документацию, а еще и логически связывать ее. Понимать.
Хотя бы просто покликайте по активным ссылкам.

 

 

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

alert(typeConverter(map.getType().getName())) ;

function idmap(name) {
    var types = ["YMaps.MapType.MAP", "YMaps.MapType.SATELLITE", "YMaps.MapType.HYBRID"], names = ["Схема", "Спутник", "Гибрид"];
    return types[names.indexOf(name)];
};

 

На самом деле, можно.

 

И чтоб это выяснить, нужно 5 минут и консоль файрбага\хрома. И там немного поиграться методами.

 

Вообще, я использую:

 

map.getType().getLayers()

 

 

Мне так удобнее.

А ежели Вы хотите использовать константы слоев, можно использовать подобные конструкции:

  

 

if (map.getType()== YMaps.MapType.MAP) //action