Map OpenLayers:将函数注册到标记事件不起作用
我有一张OpenLayers中的地图,有一个简单的图层和一个标记图层。 标记层中的标记是根据Map OpenLayers:将函数注册到标记事件不起作用,map,openlayers,marker,Map,Openlayers,Marker,我有一张OpenLayers中的地图,有一个简单的图层和一个标记图层。 标记层中的标记是根据数据.行生成的。对于每个标记,我想注册一个函数到“mousedown”(或“click”)事件,但这似乎不起作用。标记已添加到地图中,但单击后,未输入注册到事件的函数 // Marker-Layer var markers = new OpenLayers.Layer.Markers("SABA") // Icon var size = new OpenLayers.Size(2
数据.行
生成的。对于每个标记,我想注册一个函数到“mousedown”(或“click”)事件,但这似乎不起作用。标记已添加到地图中,但单击后,未输入注册到事件的函数
// Marker-Layer
var markers = new OpenLayers.Layer.Markers("SABA")
// Icon
var size = new OpenLayers.Size(21, 25);
var offset = new OpenLayers.Pixel(-(size.w / 2), -size.h);
var iconPath = document.location.protocol + '//' + document.location.hostname + '/saba/modulesinst/sa/icons/pin.png';
var icon = new OpenLayers.Icon(iconPath, size, offset);
// Rows durchgehen
Array.each(data.rows, function(item, index) {
if (item.x != null && item.y != null) {
var newmarker = new OpenLayers.Marker(new OpenLayers.LonLat(item.x, item.y), icon.clone())
newmarker.events.register('mousedown', newmarker, function(evt) {
alert(item.name);
OpenLayers.Event.stop(evt);
});
markers.addMarker(newmarker);
}
});
this.listMap.addLayer(markers);
Openlayers文档指出,为此,您应该使用矢量层,而不是标记层:“标记是在浏览器中与地理数据交互的“旧”方式。大多数新代码应尽可能使用矢量层来代替标记层。” 使用矢量图层时,可以添加如下标记:
var marker = new OpenLayers.Feature.Vector(new OpenLayers.Geometry.Point(lon,lat), attributes);
vectorLayer.addFeatures(marker);
您可以使用以下代码初始化向量层:
function selected (evt) {
alert(evt.feature.id + " selected on " + this.name);
}
var layer = new OpenLayes.Layer.Vector("VLayer");
layer.events.register("featureselected", layer, selected);
最后,要将“选择要素”控件添加到地图,请执行以下操作:
var control = new OpenLayers.Control.SelectFeature(layer);
map.addControl(control);
control.activate();
参考这个