onClick в feature и в marker (Openlayers)

Mapserver, GeoServer, MapGuide, Google и другое ПО для веб-картографии
Ответить
dedoki
Новоприбывший
Сообщения: 2
Зарегистрирован: 04 июл 2012, 21:30
Репутация: 0

onClick в feature и в marker (Openlayers)

Сообщение dedoki »

Приветствую! На карте есть маркеры (при нажатии на которые открывается поп-ап с некой инфой) и линии (feature), тоже нужно сделать, чтобы при нажатии на линию отображался pop-up с некой инфой.
Маркеры рисуются с помощью poi:

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

var pois = new OpenLayers.Layer.Text( "Узлы (маркеры)",
						{ location: "get_layers.php?mode=GetNodesMarkers", 
						projection: map.displayProjection
						});
			map.addLayer(pois);
Линии:

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

var lineLayer = new OpenLayers.Layer.Vector("Линии"); 
			map.addLayer(lineLayer);                    
			map.addControl(new OpenLayers.Control.DrawFeature(lineLayer, OpenLayers.Handler.Path));
	
			var points = new Array(
				new OpenLayers.Geometry.Point(47, 32.24),
				new OpenLayers.Geometry.Point(45, 33),
				new OpenLayers.Geometry.Point(49, 35)
			);

			var line = new OpenLayers.Geometry.LineString(points);
			line.transform(new OpenLayers.Projection("EPSG:4326"), new OpenLayers.Projection("EPSG:900913"));

			var style = { 
				strokeColor: '#0000ff', 
				strokeOpacity: 0.5,
				strokeWidth: 5
			};

			var lineFeature = new OpenLayers.Feature.Vector(line, null, style);
			alert(lineFeature.id);
			lineLayer.addFeatures([lineFeature]);
Функции (поп-ап для линии):

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

function onPopupClose(evt) {
				selectControl.unselect(selectedFeature);
			}
			function onFeatureSelect(feature) {			
				selectedFeature = feature;
				id = feature.id;				
				var lonlat = map.getLonLatFromPixel(map.getControlsByClass("OpenLayers.Control.MousePosition")[0].lastXy);

				popup = new OpenLayers.Popup.FramedCloud("chicken", 
														lonlat,
														null,
														"<div style='font-size:.8em'>" +CableLineText_arr[id] +"</div>",
														null, true, onPopupClose);
				feature.popup = popup;
				map.addPopup(popup);
			}
			function onFeatureUnselect(feature) {
				map.removePopup(feature.popup);
				feature.popup.destroy();
				feature.popup = null;
			}
onSelect линии:

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

selectControl = new OpenLayers.Control.SelectFeature(lineLayer,
					{onSelect: onFeatureSelect, onUnselect: onFeatureUnselect});
			drawControls = {
						select: selectControl
					};            
            for(var key in drawControls) {
                map.addControl(drawControls[key]);
            }
Сопсно, если в цикле, который выше, добавить:

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

var control = drawControls[key];	
control.activate();
, то при выборе линии будут отображаться поп-апы, а если клацнуть на маркере - поп-ап не отображается.
Если убрать control.activate(); , то все наоборот: при клике на маркере - поп-ап отображается, при клике на линии - ничего.
Вопрос: как же их помирить, чтобы одновременно работали поп-апы и для маркера, и для узлов?
Заранее спасибо!

П.С. Пример поп-апа брался отсюда: http://openlayers.org/dev/examples/sele ... popup.html
dedoki
Новоприбывший
Сообщения: 2
Зарегистрирован: 04 июл 2012, 21:30
Репутация: 0

Re: onClick в feature и в marker (Openlayers)

Сообщение dedoki »

Решил проблему. Пои рисуются тоже через OpenLayers.Layer.Vector:

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

var layerPOI = new OpenLayers.Layer.Vector("POIs", {
                strategies : [new OpenLayers.Strategy.BBOX({resFactor: 1.1})],
                protocol   : new OpenLayers.Protocol.HTTP({
                    url    : "get_layers.php?mode=GetNodesMarkers",
                    format : new OpenLayers.Format.Text()
                })
            });
            map.addLayer(layerPOI);
и:

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

selectControl = new OpenLayers.Control.SelectFeature([layerPOI,lineLayer]);
            map.addControl(selectControl);
            selectControl.activate();
			 
			lineLayer.events.on({
                'featureselected'   : onFeatureSelect,
                'featureunselected' : onFeatureUnselect
            });
                 
            layerPOI.events.on({
                'featureselected'   : onFeatureSelect2,
                'featureunselected' : onFeatureUnselect2
            });
Ответить

Вернуться в «Веб-картография»

Кто сейчас на конференции

Сейчас этот форум просматривают: Ahrefs [Bot] и 4 гостя