Клуб API Карт

Как определить координаты метки?

getrix
9 июля 2010, 17:23

Здравствуйте.

Начинаю осваивать API Яндекс.Карт (при этом, совершенно не зная JS) и уже около часа бъюсь с проблемой определения координат метки.

Ситуация такая. При загрузке страницы карте отдается название города (например строка "Россия, Москва"), в центр которого ставится метка. Метку можно двигать, т.е. указывать более точное местоположение. После завершения перемещений метки пользователь нажимает кнопку "Сохранить" и координаты должны отдаться POST-методом на сервер.

Единственное что не получается - это получить координаты. С тем как отдать их серверу проблем, думаю, не будет.

Так вот, вопрос, - как получить координаты метки, после ее перемещения по карте?

В <body> добавлено onload="showAddress(\''.$q.'\');" (такие странные ковычки, потому что BODY внутри echo PHP-скрипта)

Исходный код взят из примера про поиск по адресу и отсюда и, в итоге, я "намешал" вот что:

 <script type="text/javascript">
        var map, geoResult;

        // Создание обработчика для события window.onLoad
        YMaps.jQuery(function () {
            // Создание экземпляра карты и его привязка к созданному контейнеру
            map = new YMaps.Map(YMaps.jQuery("#YMapsID")[0]);

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

            var typeControl = new YMaps.TypeControl([YMaps.MapType.MAP, YMaps.MapType.SATELLITE, YMaps.MapType.HYBRID], [1,2]);
            map.addControl(typeControl);



        });



        // Функция для отображения результата геокодирования
        // Параметр value - адрес объекта для поиска
        function showAddress (value) {
            // Удаление предыдущего результата поиска
            map.removeOverlay(geoResult);

            // Запуск процесса геокодирования
            var geocoder = new YMaps.Geocoder(value, {results: 1, boundedBy: map.getBounds()});

            // Создание обработчика для успешного завершения геокодирования
            YMaps.Events.observe(geocoder, geocoder.Events.Load, function () {
                // Если объект был найден, то добавляем его на карту
                // и центрируем карту по области обзора найденного объекта
                if (this.length()) {
                    geoResult = this.get(0);
                    //map.addOverlay(geoResult);
                    map.setBounds(geoResult.getBounds());
                    var placemark = new YMaps.Placemark(map.getCenter(), {draggable: true});
                    map.addOverlay(placemark);

                }else {
                    alert("Ничего не найдено")
                }
            });

            // Процесс геокодирования завершен неудачно
            YMaps.Events.observe(geocoder, geocoder.Events.Fault, function (geocoder, error) {
                alert("Произошла ошибка: " + error);
            });


        }


    </script>
2 комментария
Подписаться на комментарии к посту
Измените обработчик Load вот так:

...
if (this.length()) {
    geoResult = this.get(0);
    geoResult.setOptions({draggable: true});
    map.addOverlay(geoResult);

    map.setBounds(geoResult.getBounds());
}else {
    alert("Ничего не найдено")
}
...

Получить координаты добавленной метки можно будет так:

var coords = geoResult.getGeoPoint();
Спасибо огромное, работает :)