0

目前我正在尝试更改用户关注的矢量图层的特定特征的图标。我将每个功能添加到地图中,如下所示:

var point = new OpenLayers.Geometry.Point(pt.lon, pt.lat);
var markerStyle = OpenLayers.Util.extend(OpenLayers.Feature.Vector.style['default'],  {
    externalGraphic: iconURL
});
var marker = new OpenLayers.Feature.Vector(point, attributes, markerStyle);

稍后我执行以下操作来更新功能的图标:

var marker = this.findSelectedMarker();
if (marker) {
    marker.style.externalGraphic = newIconUrl;
    this.layer.redraw();             
}

但是当图层重绘时,我图层中的所有功能都使用newIconUrl,而不仅仅是我尝试更新的选定标记。

如何更改图层的一个选定功能的图标?谢谢。

4

1 回答 1

1

为了解决这个问题,我需要解决两个问题。第一个与使用多个 OpenLayers 样式有关,无论是在图层级别还是在单个功能级别。我删除了每个单独功能的样式,因此只实现了以下图层样式:

this.layerStyle = new OpenLayers.StyleMap({ 
    'default': {
        externalGraphic: media_url + '${iconURL}',
        graphicHeight: 32,
        graphicWidth: 32,
        graphicXOffset: -16,
        graphicYOffset: -32,
        fillOpacity: 0.75
    }
});

我所做的第二个更改是使用属性替换语法来指定具有名为'${iconURL}'. 这使我可以通过简单地更改所选功能的属性并重绘图层来更改图标 url:

focusedMarker.attributes.iconURL = this.focusedURL;
this.layer.redraw();
于 2012-09-10T17:03:18.460 回答