Клуб API Карт

как сделать перемещение карты на новый адрес через метод panto

Пост в архиве.

Добрый день!

 

Я начинающий))

Возник вопрос.

Я вывожу карту через ymaps.ready(init); Тут проблем нет.

При выполнении скрипта php появляется новый адрес для карты, при этом страница не перезагружается - адрес меняется в DOM через JS.

Как мне переместить карту методом panto на новый адрес?? (адрес через jquery будет передаваться скрипту)

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

16 комментариев
panTo принимает только геокоординаты, чтобы преобразовать в них адрес, его нужно сначала геокодировать, см. метод geocode.
Желательно прогеокодировать все свои адреса один раз на сервере и записать координаты в базу, чем геокодировать каждый раз на клиенте и тратить трафик пользователей
OlegOlegOlegOleg1980
28 января 2016, 02:07

естественно геокодирование обязательно!

поэтому и вопрос - куда обработчик вставить- в res функции геокодирования?? или как?

Я про то что лучше один раз прогеокодировать ваши объекты на сервере и работать уже с координатами на клиенте.


Сначала геокодируете, в обработчике переходите myMap.panTo(res.geoObjects.get(0).geometry.getCoordinates());
OlegOlegOlegOleg1980
28 января 2016, 02:07

ymaps.ready(init);

function init() 

{    

    ymaps.geocode('', { results: 1 }).then

(

function (res)// Поиск координат по адресу 

{        

        var firstGeoObject = res.geoObjects.get(0),// Выбираем первый результат геокодирования        

            myMap = new ymaps.Map// Создаем карту с нужным центром

("map",  

center: firstGeoObject.geometry.getCoordinates(),

zoom: 16// Исходный масштаб

}

);

var myPlacemark = new ymaps.Placemark// Создаем метку с найденными координатами

(

firstGeoObject.geometry.getCoordinates(),

{

iconContent: 'Наш адрес'// Надпись на метке

},

{

preset: 'twirl#redStretchyIcon'// Красная растягивающаяся метка

}

);

myMap.geoObjects

.add(myPlacemark);

myMap.controls        

.add('zoomControl', { left: 1, top: 1 })// Кнопка изменения масштаба        

.add('typeSelector');// Список типов карты

}, 

function (err) 

{        

        alert(err.message);// Если геокодирование не удалось, сообщаем об ошибке

}

);

}

 

OlegOlegOlegOleg1980
28 января 2016, 02:07

Геокодировать нужно в режиме run-time поэтому не получится на сервер загнать, да это и не важно. Я не совсем понимаю как второй раз обращаться к уже существующему объекту map и в каком месте это можно сделать. Возможно написать еще одну функцию с обработчиком, либо надо делать все в одном месте при инициализации карты?? Подскажите плз...

Всеже лучше хранить координаты у себя и в геокодер не ходить. Это ускорит ваш сайт и съэкономит траффик ваших пользователей.

http://my.yandex.ru/ymapsapi/replies.xml?item_no=81

OlegOlegOlegOleg1980
28 января 2016, 02:07

вы меня не поняли. у меня миллионы адресов и я не могу их в базе хранить. да и суть вопроса не в этом. попробую объяснить на пальцах. карта рисуется скриптом выше. в процессе работы пользователь может изменить адрес. как мне переместить карту на новый адрес без перезагрузки страницы? есть метод panto, хотел сделать через него, только я не понимаю как написать обработчик и где он должен быть. новый адрес в скрипт передается через jquery, но что с ним дальше делать - не знаю... помогите написать обработчик с методом panto. спасибо! 

P.S. сейчас я делаю топорным образом - через jquery вырубаю методом empty() содержимое контейнера map и запускаю скрипт геокодирования заново с уже новым адресом. все работает - но это косячный способ. мне нужно чтоб это было через метод panto(). подскажите как это правильно сделать. спс.

я же Вам написал. Сначала геокодируете адрес, потом уже panTo
ymaps.geocode(...).then(function (res) {
   myMap.panTo(res.geoObjects.get(0).geometry.getCoordinates());
});
OlegOlegOlegOleg1980
28 января 2016, 02:07

не понял все равно)) куда мне в код выше это вписать??? или это отдельная функция будет??? а как тогда удалить старую карту? у меня рисуется новые карты если я не удаляю их

OlegOlegOlegOleg1980
28 января 2016, 02:07

пробовал вставить обработку события change элемента 

 $("#id_adress").bind('change', function() {

var adr = $("#id_adress").val();

myPanTo(adr);

});

 

почему то не работает(((

не надо создавать карту каждый раз. сделайте это один раз и потом просто меняйте ей центр через panTo
см. этот пример
http://ymapsapi.ya.ru/replies.xml?&item_no=306&ncrnd=7874
OlegOlegOlegOleg1980
28 января 2016, 02:07

я так и хочу!!! только подскажите как это реализовать???? что конкретно в какое место написать. лучше если скриптик накидаете схематично :-) а дальше я сам додумаю;-)

вынесите создание карты из обработчика. создавайте ее с каким-то центром по-умолчанию (Москва) а в обработчике перемещайте только
OlegOlegOlegOleg1980
28 января 2016, 02:07

Дмитрий (извините если неправильно указал ваше имя), собственно, структуру то я представляю, но мне нужно именно КАК это сделать, знал бы не спрашивал :-)

подскажите плз код, ведь он должен быть очень простой. 

При мне сейчас только мобильник... посмотри код примера, что я тебе запостил выше, там и геокодирование и перемещение карты
OlegOlegOlegOleg1980
28 января 2016, 02:07

смотрел - там ссылка 404