Яндекс.Карта на Вашем сайте с возможностью добавления меток пользователями – Продолжение-2

Смотри начало и продолжение.

В этот раз я расскажу как выводить метки пользователей из базы данных, используя файл в формате 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-документу, в примере http://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, а ваш файл наверное находится на локальном хостинге.