Клуб API Карт

Запоминание состояния карты между обновлениями

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



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



Использую Yandex-карту
в 1с 8. Отображаю необходимые метки, линии, отрабатываю события кликов - все
нормально. Но есть необходимость обновлять карту с каким-то интервалом (скажем
2 минуты).  При этом на карте добавляются
новые метки. 



Сейчас сделано так:
 моя программа переформировывает текст
скрипта и вновь передает его html-полю
на форме. Все бы ничего, но пользователь за эти 2 минуты может двигать карту
изменять увеличение средствами Yandex-карт
и т.п.  А у меня нет данных о его
действиях,  об изменившемся центре и
значении текущего зума, я просто не знаю как их взять и передать в переменные
. В итоге, в скрипт опять передаю свои дефолтные значения в map.setCenter() и
перерисовываю карту. У пользователя сбиваются все его настройки, что очень
неудобно.



Идеологию web-программирования
и скриптов представляю себе слабо, поэтому вижу со свего уровня знаний два
решения:



1. Убрать контролы Яндекса, и вынудить пользователя двигать карту кнопками на
форме, при каждом нажатии перерисовывая карту, и запоминая смещение.



2. В событии при сдвигании карты в скрипте, выплевывать
значения текущего центра и зума в определенный текстовый файлик (если java-скрипт позволяет
работать с файлами).  А при обновлении
меток, считывать оттуда значения и формировать скрипт на этих значениях.

 



Оба решения кажутся мне жутко кривыми. Прошу помощи у
сообщества.

5 комментариев

вариант 1 не вариант

вариант 2 практически правильный

стейт карты можно запомнить в куках( но это зависит от места открытия встроенного браузера )

либо сохранить в url страницы. например дописав туда #center=x,y&zoom=...

перед обновлением данных считать активный урл фрейма( если это возможно )

Я, так уж вышло, не силен в 1С, но думаю там все это предусмотренно и описанно.

Самый правильный вариант - научиться связывать события на карте с обработкой их в 1С и управлением картой из 1С (т.е. построить для себя протокол взаимодействия Яндекс карты и 1С в обе стороны).

Это вполне разрешимая задача, я уже так больше года работаю. Если интересно - по мылу пообщаемся, а то тут мало любителей 1С.

Здравствуйте, Юрий!

Мне интересно как у вас реализован протокол обмена между картой и 1с, т.к. сейчас тоже занимаюсь интеграцией. Сейчас реализовал в js для запоминания текущего масштаба карты:

|    YMaps.Events.observe(map, map.Events.Update, function () {
    |                                                                MapZoom = map.getZoom();
    |                                                                var evt_onbeforeupdate = document.createEventObject();  //вызовем событие и отработаем его в 1с
    |                                                                document.body.fireEvent('onbeforeupdate', evt_onbeforeupdate);
    |                                                                });

 

и уже в 1с обработчике событий поля документа, вызываю функцию js:

ТекМасштабКарты = ЭлементыФормы.ПолеHTMLДокумента.Документ.parentWindow.eval("getMapZoom()");

 

и при следующих обновлениях использую этот текмасштаб.

 

А у вас как реализован обмен?

Юрий, самый правильный вариант, не использовать Яндекс.Карты в закрытых системах. Это нарушение пользовательского соглашения http://legal.yandex.ru/maps_api/.

Я правильно понимаю, что вы используете карту в закрытой системе, к которой есть доступ только у сотрудников компании? Это запрещено пользовательским соглашением  http://legal.yandex.ru/maps_api/.