2

OpenLayers に、単純なレイヤーとマーカー レイヤーを含むマップがあります。マーカー レイヤーのマーカーは から生成されdata.rowsます。すべてのマーカーについて、関数を「マウスダウン」(または「クリック」) イベントに登録したいのですが、うまくいかないようです。マーカーがマップに追加されましたが、クリックすると、イベントに登録された機能が入力されません。

// 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);
4

1 に答える 1

5

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();

このOpenlayers ドキュメントを参照してください

于 2013-01-28T16:10:23.983 に答える