Я продолжаю рассказ начатый в заметке «Добавление меток пользователями через отдельную форму — API Яндекс.Карт v2.x».
И здесь я рассмотрю как можно добавлять метки и выводить по категориям.
За основу возьмем код из уже упомянутой заметки «Добавление меток пользователями через отдельную форму — API Яндекс.Карт v2.x».
А также код файлов addmetki-cat.php и vivodpointsmap-cat.php из заметки «Добавляем новую категорию».
С начала изменим код файла index.html.
Заменим код для SELECT и значков меток на следующий:
<div class="form-group"> <label>Значок метки:</label> <div class="input-prepend"><span class="add-on"><img src="http://api.yandex.ru/maps/doc/jsapi/2.x/ref/images/styles/bar.png" style="height: 30px"></span> <select name="image" id="image" class="form-control"> <option data-path="http://api.yandex.ru/maps/doc/jsapi/2.x/ref/images/styles/bar.png" value="twirl#barIcon">Бар</option> <option data-path="http://api.yandex.ru/maps/doc/jsapi/2.x/ref/images/styles/cafe.png" value="twirl#cafeIcon">Кафе</option> <option data-path="http://api.yandex.ru/maps/doc/jsapi/2.x/ref/images/styles/restaurant.png" value="twirl#restaurantIcon">Ресторан</option> <option data-path="http://api.yandex.ru/maps/doc/jsapi/2.x/ref/images/styles/theater.png" value="twirl#theaterIcon">Театр</option> </select></div> |
Так же под окном с картой расположим кнопки для отображение меток из соответствующих категорий.
<div id="buttoncat"> <a href="#bar" class="btn btn-primary btn-primary" onclick="show_c('bar'); return false;">Бар</a> <a href="#restaurant" class="btn btn-primary btn-primary" onclick="show_c('restauraunt'); return false;">Ресторан</a> <a href="#cafe" class="btn btn-primary btn-primary" onclick="show_c('cafe'); return false;">Кафе</a> <a href="#theater" class="btn btn-primary btn-primary" onclick="show_c('theater'); return false;">Театр</a> </div> |
Теперь изменяем javascript файл yandexmap.js формирования карты.
В глобальные переменные добавляем следующие:
myCollection — коллекции меток;
MyBalloonContentLayoutClass — шаблон данных для балуна.
Редактируем код функции init.
После добавления элементов управления, определяем коллекцию меток:
myCollection = new ymaps.GeoObjectCollection(); |
Удаляем var из строки
var MyBalloonContentLayoutClass = ymaps.templateLayoutFactory.createClass( |
Далее удаляем код вывода меток:
$.getJSON("vivodpointsmap.php", function(json){ for (i = 0; i < json.markers.length; i++) { var myPlacemark = new ymaps.Placemark([json.markers[i].lat,json.markers[i].lon], { name: json.markers[i].icontext, description: json.markers[i].balloontext, hintContent: json.markers[i].hinttext },{ balloonContentLayout: MyBalloonContentLayoutClass, preset: json.markers[i].styleplacemark }); // Добавляем метку на карту myMap.geoObjects.add(myPlacemark); } }); |
И добавляем новую функцию вывода меток для отдельной категории:
function show_c(c){ myCollection.removeAll(); //Запрос данных и вывод маркеров на карту $.getJSON("vivodpointsmap-cat.php", {cat:c}, function(json){ for (i = 0; i < json.markers.length; i++) { var myPlacemark = new ymaps.Placemark([json.markers[i].lat,json.markers[i].lon], { name: json.markers[i].name, description: json.markers[i].balloontext, hintContent: json.markers[i].hinttext },{ balloonContentLayout: MyBalloonContentLayoutClass, preset: json.markers[i].styleplacemark }); myCollection.add(myPlacemark); } myMap.geoObjects.add(myCollection); }); return false; } |
Смотрим, что у нас получилось.
В заключении всем тем, кто интересуется тем, как организовать добавление меток пользователями на Яндекс.Карту, я подготовил бесплатную книгу, загрузить её можно здесь.
Далее я планирую продолжить данную тему и рассказать о том, как можно сделать редактирование уже добавленных меток.