Клуб API Карт

Поставить метку по ссылке

greendumb
16 марта 2011, 17:58

Здравствуйте! Помогите пожалуйста решить задачу: есть код, он разбирает УРЛ - показывает и центрирует карту на заданных координатах, на заданном масштабе

<script type="text/javascript">
YMaps.jQuery(function () {
            var map = new YMaps.Map(document.getElementById("YMapsID")),
                flagLoad = 0;

            map.addControl(new YMaps.Zoom({ noTips: true }));

            map.enableScrollZoom();

            // Установка для карты ее центра и масштаба
            map.setCenter(new YMaps.GeoPoint(35.376940479483046, 45.03851500222226), 14);


            // Динамически формируем урл
            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() ;
            }

            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.MAP;
                    switch (params.mt) {

            case 'map':
                            mapType = YMaps.MapType.MAP;
                            break;

                        case 'sat':
                            mapType = YMaps.MapType.SATELLITE;
                            break;

                        case 'hyb':
                            mapType = YMaps.MapType.HYBRID;
                            break;
                    }
                  // Центрируем карту в нужном месте
                    map.setCenter(YMaps.GeoPoint.fromString(params.ll), params.z, mapType);
                   

                }
            }

            // Скрипт загружен, все параметры из URL'a применены
            flagLoad = 1;
        });
    </script>

как поставить в центре карты метку?

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

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

Нужно найти центр карты и поставить туда метку.

Найти центр карты можно двумя способами, через апи или логически подумав.

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

map.addOverlay(new YMaps.Placemark(map.getCenter()));

Я пробовал так, только метке возвращается координаты от

map.setCenter(new YMaps.GeoPoint(35.376940479483046, 45.03851500222226), 14);
Да еще ко всему сервер хостера кэширует, приходится результата ждать по полчаса:-|

 

Пример, того как вы пробовали приведите.

PS. Не надо делать два раза map.setCenter() сделайте в начале так:

if param.ll {point =YMaps.GeoPoint.fromString(params.ll); } else  {point = new YMpas.GeoPoint(default);}

И в конце отчентрируйте карту один раз.

map.setCenter(point)

От свитча можно избавиться так:

mapType =  {'sat':YMaps.MapType.SATELLITE,

'hyb':YMaps.MapType.HYBRID}[params.ml] || YMaps.MapType.MAP;

 


Туповат я, не дано разобраться.

В примере, который я брал за основу, формируется ссылку вида

 

http://site.net/test.html#ll=34.09111,44.960835&z=17&mt=map&p=34.09111,44.960835

 а на деле параметр "p", который должен ставить метку, не разбирается.

В джаваскрипте не разбираюсь, все что у меня получалось, сделано на основе примеров+метод проб и ошибок, а сейчас даже пробовать тяжело - надо ждать обновления кэша по 20 минут.

Спасибо за помощь!