Клуб API Карт

Учет координат перемещаемого маркера в адресной строке

rx333
24 июля 2009, 02:45

Благодаря примеру Саши Белого (спасибо!) получил конструкцию, принимающую параметры карты из урл. Добавил туда также установку маркера, если его координаты заданы. Выглядит это так:


            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) {
                    var mapType = YMaps.MapType.MAP;
                    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);
                }
// Маркер
                if (params.p) {
                var pmark = new YMaps.Placemark(YMaps.GeoPoint.fromString(params.p), {draggable: true, hasBalloon: 0});
            pmark.setIconContent('Здесь');
            map.addOverlay(pmark);                
                }

 

Это работает, проверил.

Вопрос в том, как динамически передавать в адресную строку координаты маркера (p=) ? И вообще, возможно ли это?

Если остальные параметры передаются через:


            YMaps.Events.observe(map, [map.Events.Update, map.Events.MoveEnd, map.Events.ChangeType], function (obj, e) {
                document.location.hash = '#ll=' + map.getCenter().toString() +
                                         '&z=' + map.getZoom() +
                                         '&mt=' + map.getType().getLayers().toString();
            });

 

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


<script language="JavaScript">
function mark() {
var placemark = new YMaps.Placemark(map.getCenter(), {draggable: true, hasBalloon: 0});
            placemark.setIconContent('Здесь');
            map.addOverlay(placemark);
};
</script>


7 комментариев
Подписаться на комментарии к посту
Что мешает p поместить за решетку?
Сорри, я ни разу не программист, хотя и пытаюсь в этом разобраться. Поэтому не очень понимаю, о чем вы.

Пробовал добалять "р" и так:

            YMaps.Events.observe(map, [map.Events.Update, map.Events.MoveEnd, map.Events.ChangeType], function (obj, e) {
                document.location.hash = '#ll=' + map.getCenter().toString() +
                                         '&z=' + map.getZoom() +
                                         '&mt=' + map.getType().getLayers().toString() +
                                         '&p=' + placemark.getGeoPoint();
            });

и по другому. Не работает. В основном методом тыка.

Буду благодарен за более детальное пояснение.
Ссылку, где не работает
Нужно обновлять координаты метки не только при событиях карты, но и при событии PositionChange метки.

Добавил в пример работу с меткой:
http://rodlex.narod.ru/examples/center-map-from-get-params.html

Roman, методом тыка не нужно действовать. Изучайте Руководство разработчика, обращайтесь к Справочнику по программному интерфейсу и учебникам по JavaScript. Все получится! Удачи!
И еще раз огромнейшее спасибо!:)

Без начальных навыков программинга в руководстве разработчика довольно сложно ориентироваться. Поэтому, в моем случае, наиболее быстрое понимание приходит именно с разбором различных примеров, подгоняя их под свои цели, в том числе и методом тыка))

Подобные задачи пока возникают не часто, поэтому, и не начинаю изучение java с нуля. Но если потребуется, то конечно буду. Спасибо за рекомендации!
java != javascript ;)

Если Вы решили пойти в направлении веб-разработки, то javascript необходимо изучать.

Обязательно покажите сервис, который Вы делаете. Хочется на него посмотреть.
Смутно догадывался, что это разные вещи:)
Изучать видимо придется постепенно))

Сервис такой: http://crimeamap.ru/test/

Не получается навесить отображение координат в адресной строке для маркера, вызываемого функцией (mark), при нажатии кнопки (справа - Поставить метку)

В случае, если маркер вызван из адресной строки, то все работает:
http://crimeamap.ru/test/#ll=35.260519,45.430202&z=9&mt=map&p=35.84278,45.457254