Клуб API Карт

Как правильно сохранить тип карты?

Пост в архиве.
aleksander.smolyakov
9 февраля 2011, 14:43

Доброго времени!

Идея такая, что, зарегиный юзер открывает тот тип карты (Схема, Спутник, Гибрид) который сохранил, Сейчас я сделал так:

function YaChange(m){

var x = m.getType();

var s = x.getName();

switch( s ){

case "Схема":this.yaty = 'YMaps.MapType.MAP';break;

case "Спутник":this.yaty = 'YMaps.MapType.SATELLITE';break;

case "Гибрид":this.yaty = 'YMaps.MapType.HYBRID';break;

}

this.ty = this.yaty;

}

.....

this.map = new YMaps.Map( this.canvas );

this.map.setCenter( new YMaps.GeoPoint(this.lon, this.lat), this.zoom, eval(this.ty) );

this.yaty = this.ty;

...

YMaps.Events.observe( this.map, this.map.Events.TypeChange, YaChange, this );

Тупо, конечно, но работает...пока... у меня.

С гуглом вышло проще, и на мой взгляд более стабильно:

function GooChangeMapId(){

var s = mapper.map.getMapTypeId();

mapper.ty = "google.maps.MapTypeId."+s.toUpperCase();

mapper.gooty = mapper.ty;

}

,,,,,

    var mapCenter = new google.maps.LatLng( this.lat, this.lon );

    var mapOptions = {

      zoom: this.zoom,

      center: mapCenter,

      mapTypeId: eval(this.ty)

    }

this.gooty = this.ty;

this.map = new google.maps.Map( this.canvas, mapOptions );

,,,,

google.maps.event.addListener(this.map, 'maptypeid_changed', GooChangeMapId );

 

Моя реализация Яндекса меня тревожит: кто сказал что на др компе имена карт не изменятся и останусь я в неудел....

Есть ли более стабильный вариант?

Спасибо

7 комментариев
    setMapType : function (type){
        var mtype=YMaps.MapType.MAP;
        if(type==MAPTYPE_NORMAL  ) mtype=YMaps.MapType.MAP      ;
        if(type==MAPTYPE_HYBRID  ) mtype=YMaps.MapType.HYBRID   ;
        if(type==MAPTYPE_SATELITE) mtype=YMaps.MapType.SATELLITE;
        this.api.setType(mtype)
    },
   
    getMapType : function (){
        var type=this.api.getType();
        if(type==YMaps.MapType.MAP      )return MAPTYPE_NORMAL;
        if(type==YMaps.MapType.HYBRID   )return MAPTYPE_HYBRID;
        if(type==YMaps.MapType.SATELLITE)return MAPTYPE_SATELITE;
        return MAPTYPE_NORMAL;
    },



Без русских букв и через промежуточные константы, если добавить switch-case или какойнить lookup-hash будет еще красивее
aleksander.smolyakov
9 февраля 2011, 15:17
Извините за мой французкий...я в JS совсем недано программлю:
То есть Вы предлагаете добавить методы setMapType и getMapType к классу YMaps.Map И уже через них работать?
конечно же нет, я просто нарисовал вам две функции которые делают именно то что вам нужно.
В частности назовите вторую YaChange(m) и замените this.api на m
А вторая, в вашем примере, идет после ...
aleksander.smolyakov
9 февраля 2011, 16:27
Спасибо. Буду разбиратся
aleksander.smolyakov
9 февраля 2011, 16:31
ААА... всё! ДОШЛО. СПАСИБО!!
aleksander.smolyakov
9 февраля 2011, 16:42


function YaChange(m){
switch(m.getType()){
case YMaps.MapType.MAP: this.yaty = 'YMaps.MapType.MAP';break;
case YMaps.MapType.SATELLITE: this.yaty = 'YMaps.MapType.SATELLITE';break;
case YMaps.MapType.HYBRID: this.yaty = 'YMaps.MapType.HYBRID';break;
}
this.ty = this.yaty;
}

Пожалуйста, уберите код под врезку.