Больше половины дня бьюсь над этой задачей. В общем по примерам набросал карту. По клику появляется балун с координатами текущей точки и вокруг него геообъект (полигон). При повторном клике балун пропадает, но удалить геообъект у меня не получается. myMap.geoObjects.remove(myGeoobject); - не работат, выдает ошибку скрипта "b is undefined".
// Как только будет загружен API и готов DOM, выполняем инициализацию
ymaps.ready(init);
function init () {
// Создание экземпляра карты и его привязка к контейнеру с заданным id ("map")
var myMap = new ymaps.Map('map', {
// При инициализации карты, обязательно нужно указать
// ее центр и коэффициент масштабирования
center: [46.466444, 30.7058], // Одесса
zoom: 12
}, {
balloonMaxWidth: 160,
balloonMaxHeight: 80
}),
myOptions = {
// Цвет заливки
fillColor: '#E0D3BD',
// Цвет границ
strokeColor: '#78694E',
// Прозрачность (прозрачная заливка)
opacity: 0.7,
// Ширина линии
strokeWidth: 6,
draggable: true // объект можно перемещать, зажав левую кнопку мыши
};
// Для добавления элемента управления на карту используется поле controls, ссылающееся на коллекцию элементов управления картой.
// Добавление элемента в коллекцию производится с помощью метода add().
// В метод add можно передать строковый идентификатор элемента управления и его параметры.
myMap.controls
// Кнопка изменения масштаба
.add('zoomControl', { right: 7, top: 35 })
// Список типов карты
.add('typeSelector')
// Кнопка изменения масштаба - компактный вариант
// Расположим её справа
/*.add('smallZoomControl', { right: 5, top: 75 })*/
// Стандартный набор кнопок
/*.add('mapTools')*/;
// Выводит массив координат геообъекта в поле
function printGeometry (coords) {
function stringify (coords) {
var res = '';
if ($.isArray(coords)) {
res = '[ ';
// (coords.length - 1) - чтоб не дублировалась последняя точка
for (var i = 0, l = coords.length; i < l; i++) {
if ((stringify(coords[i]) != stringify(coords[0])) || (i == 0))
{
if (i > 0) {
res += ', ';
}
res += stringify(coords[i]
}
}
res += ' ]';
} else if (typeof coords == 'number') {
res = coords.toPrecision(6);
} else if (coords.toString) {
res = coords.toString(
}
return res;
}
}
// Обработка события, возникающего при щелчке левой кнопкой мыши в любой точке карты.
// При возникновении такого события откроем балун.
myMap.events.add('click', function (e) {
if (!myMap.balloon.isOpen()) {
var coords = e.get('coordPosition');
myMap.balloon.open(coords, {
contentHeader: '',
contentBody: '<p>Текущие координаты: ' + [
coords[0].toPrecision(6),
coords[1].toPrecision(6)
].join(', ') + '</p>',
contentFooter: '<sup>Чтоб отменить - щелкните еще раз</sup>'
}
// Создаем новый геообъект (многоугольник)
myGeometry = {
type: 'Polygon',
coordinates: [
[
[(parseFloat(coords[0].toPrecision(6)) + 0.03), parseFloat(coords[1].toPrecision(6))],
[(parseFloat(coords[0].toPrecision(6)) - 0.01), (parseFloat(coords[1].toPrecision(6)) + 0.03)],
[(parseFloat(coords[0].toPrecision(6)) - 0.01), (parseFloat(coords[1].toPrecision(6)) - 0.03)]
]
]
}
var myGeoobject = new ymaps.GeoObject({geometry: myGeometry}, myOptions);
myGeoobject.events.add('geometrychange', function (event) {
printGeometry(myGeoobject
}
myMap.geoObjects.add(myGeoobject);
printGeometry(myGeoobject
myGeoobject.editor.startEditing(
} else {
// не работает
myMap.geoObjects.remove(myGeoobject);
myMap.balloon.close(
}
}
}