Смотри начало и продолжение.
В этот раз я расскажу как выводить метки пользователей из базы данных, используя файл в формате YMapsML.
Мы будем формировать этот файл динамически, каждый раз, когда пользователь открывает страницу с картой. Пусть он будет называться point_users.xml.
Полный код файла для его создания – create_YMapsML.php.
В начале, мы подключаем файл для соединения с базой данных.
Затем мы присваиваем переменной $f_xml1 – часть кода нашего файла point_users.xml, которая будет иметь всегда постоянную структуру.
В ней задается стиль отображения меток и балуна.
И начинаем формировать набор геообъектов (набор меток пользователей).
После этого открывем файл point_users.xml на запись, если его не было создаем его, строка
$files_xml = fopen("point_users.xml","w"); |
Если файл открыт успешно, записываем в него кусок кода из переменной $f_xml1.
Затем мы извлекаем из базы данных значения меток пользователей и также последовательно заносим их в файл.
В конце файла мы дописываем еще несколько тегов:
И закрываем файл.
После этого мы открываем файл vivid_mappoint.php, созданный в предидущей заметке и сохраняем его под новым именем vivid_mappoint_xml.php.
Открываем новый файл (vivid_mappoint_xml.php ) для его изменения.
Из него удаляем весь код начиная сразу после добавления элементов управления на карту и заканчивая перед строкой
Maps.Events.observe(map, map.Events.Click, function (map, mEvent) {
Вместо удаленного кода мы вставляем следующее:
map.enableScrollZoom(); var ml = new YMaps.YMapsML( 'http://webmap-blog.ru/files/point_users.xml' ); map.addOverlay(ml); YMaps.Events.observe(ml, ml.Events.Fault, function (error) { alert('Ошибка: ' + error); }); |
Здесь мы сначала добавляем возможность изменения масштаба колесиком мыши.
Следующий код служит для загрузки xml-фала на языке YMapsML и отображения его на карте.
И еще мы изменим имя файла для обработки введенных значений формы с outpoint.php на outpoint2.php
Сохраняем файл.
Открываем файл outpoint.php и добавляем в него строку
include ("create_YMapsML.php"); |
Сразу после строки
$result = mysql_query($sql) or die("Ошибочный запрос: " . mysql_error()); |
Сохраняем файл под новым именем outpoint2.php
Все мы можем проверять работу.
Правда есть одна тонкость.
В качестве параметра конструктора YMaps.YMapsML необходимо указывать полный URL-путь к YMapsML-документу, в примере https://webmap-blog.ru/files/point_users.xml.
И еще на файл point_users.xml должны быть выставлены права на запись.
Код исходных файлов: vivid_mappoint_xml.php, create_YMapsML.php, point_users.xml, outpoint2.php
Подробнее о формате файлов YMapsML можно прочитать здесь http://api.yandex.ru/maps/ymapsml/
Чтобы не каждый раз формировать заново YMapsML-файла с метками в таблицу меток нужно ввести дополнительное поле с датой и временем ее добавления.
И сравнивать время последнего создания файла point_users.xml с временем добавления последней метки.
Если после создания файла point_users.xml метки на карту пользователями не добавлялись, то подгружать старый xml-файл.
Продолжение следует…
«Чтобы не каждый раз формировать заново YMapsML-файла с метками в таблицу меток нужно ввести дополнительное поле с датой и временем ее добавления.»
А зачем это надо? Ведь и так YMapsML-файл создаётся заново только при добавлении новой метки.
Было бы интересно посмотреть на статью о добавлении меток на карту пользователями, используя файл в формате Json.
не могу понять! всё вроде сделал как написано но на карте выдаёт ошибку «Ошибка: object Object»
Когда в vivid_mappoint_xml.php в var ml = new YMaps.YMapsML( ‘point_users.xml’ ); указываю ссылку как в примере у Вас «‘http://webmap-blog.ru/files/point_users.xml'» то нет никаких ошибок и выдаёт ваши результаты! не знаю то ли с xml файлом что-то не то! помогите пожалуйса!
Загружаемый YMapsML должен быть доступен публично по протоколу http, а ваш файл наверное находится на локальном хостинге.