Страница 1 из 1

Удалить маркер по щелчку (OpenLayers)

Добавлено: 22 авг 2012, 10:01
AGENTxXx
Добрый день!
Можете подсказать, как узнать, по какому маркеру кликнули?
Использую слой Vector и метод addFeature для добавления маркера.

Код: Выделить всё

var feature = new OpenLayers.Feature.Vector(
		 new OpenLayers.Geometry.Point(-71, 42),
		 {some:'data'},
		 {externalGraphic: '../images/icons/location.png', graphicHeight: 21, graphicWidth: 25});
		vectorLayer.addFeatures(feature);
Задача решается такая: при установке маркера открывается диалоговое окно, где пользователь может задать некоторые параметры к маркеру и выбрать 3 действия: ОК, Отмена и Удалить маркер. Но при отмене маркер остается. В итоге может быть много маркеров. И необходимо узнать, какой же маркер хочет удалить пользователь.
Где хранятся все маркеры, я нашел (в моем случае, например: map.layers[1].removeFeatures(map.layers[1].features[map.layers[1].features.length-1]);, а вот как удалить нужных - не знаю.

Подскажите, пожалуйста!

Re: Удалить маркер по щелчку (OpenLayers)

Добавлено: 22 авг 2012, 10:39
AGENTxXx
Методом тыка нашел следующий способ:
var f = new OpenLayers.Feature.Vector();
f.id = your_id;

Но все же, может кто знает, как указать id при создании, т.е. не выделяя отдельно f.id...

Re: Удалить маркер по щелчку (OpenLayers)

Добавлено: 22 авг 2012, 19:21
Denis Rykov
Вам нужно узнать по какому векторному объекту кликнули? А какой способ для клика по фичам вы используете, контрол SelectFeature?

Re: Удалить маркер по щелчку (OpenLayers)

Добавлено: 25 фев 2014, 15:35
AGENTxXx
Как то сам нашел решение. В общем удаление осуществляем через Контрол и события:

Код: Выделить всё

//Добовляем управляющий Control, отвечающий за выделения и снятие выделения с маркера
	gameGlobalQuestSelectControl = new OpenLayers.Control.SelectFeature(globalQuestsVectorLayer,
	{
		onSelect: onPopupFeatureSelect,
		onUnselect: onPopupFeatureUnselect 
	});

function onPopupFeatureSelect(feature) 
{
      map.layers[1].getFeatureById(feature.id).destroy();
}

map.addControl(gameGlobalQuestSelectControl);	
gameGlobalQuestSelectControl.activate();	
Вдруг кому-нибудь еще пригодится