Клуб API Карт

Динамический УРЛ в 2.0 на примере 1.1

krylosov
24 апреля 2012, 19:23

Есть образец: http://rodlex.narod.ru/examples/center-map-from-get-params.html

В нем, при изменении (смещении, зум или перестановка метки) динамически меняется url - следовательно создается прямая ссылка на нужный кусок карты.

Прошу помочь в настройке вывода данных в урл. в 2,0

Кусок кода в имеющемся на 1.1:

 

 
YMaps.Events.observe(map, map.Events.Click, function (map, e) {
    var  coord = e.getGeoPoint(),
           html = '<div style="text-align:center; width: 100px;"><strong>Отмечено</strong></div>';

    placemark.setGeoPoint(coord);
    placemark.setBalloonContent(html);
    placemark.openBalloon(      
}
            
            // Динамически формируем урл
            YMaps.Events.observe(map, [map.Events.Update, map.Events.MoveEnd, map.Events.ChangeType], setUrlParams);
            YMaps.Events.observe(placemark, placemark.Events.PositionChange, setUrlParams);        
            
            // Функция для формирования параметров в URL'е
            function setUrlParams(obj) {
                // Включаем установку параметров после загрузки всего скрипта
                if (!flagLoad) {
                    return;
                }
                document.location.hash = '#ll=' + map.getCenter().toString() +
                                         '&z=' + map.getZoom() +
                                         '&mt=' + map.getType().getLayers().toString() +
                                         '&p=' + placemark.getGeoPoint().toString(
            }

            var hash = document.location.hash;
            if (hash) { // Если строка параметров определена
                var hash = hash.substr(1, hash.length - 1).split('&'), // Отрезаем первый символ "#" и
                                                                       // разбиваем строку на подстроки параметр=значение
                    params = {}; // Объект будущих параметров

                for (var i = 0, l = hash.length, param; i < l; i++) {
                    param = hash[i].split('='); // Разбиваем параметр на имя и значение
                    if (param[0] && param[1]) {
                        params[param[0]] = param[1];
                    }
                }

                // Если в урле заданы необходимые параметры
                if (params.ll && params.z && params.mt && params.p) {
                    // Определяем тип карты
                    var mapType = YMaps.MapType.PMAP;
                    switch (params.mt) {
                        case 'sat':
                            mapType = YMaps.MapType.SATELLITE;
                            break;
                            
                        case 'sat,skl':
                            mapType = YMaps.MapType.HYBRID;
                            break;
                    }
                    // Центрируем карту в нужном месте
                    map.setCenter(YMaps.GeoPoint.fromString(params.ll), params.z, mapType);

                    // Устанавливаем маркер в нужную позицию
                    placemark.setGeoPoint(YMaps.GeoPoint.fromString(params.p)
                }
            }
 

 

2 комментария
Подписаться на комментарии к посту

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

 

Все в принципе тоже самое, только слушать надо map.events.add('boundchange', ....