绘制后将样式附加到特征
Attaching style to feature after drawing
我正在使用 ol.Interaction.Draw
在地图上绘制多边形。我想在绘制后对各个特征进行样式设置。
当我检测到 DRAWEND
事件时,我尝试将样式附加到最后绘制的要素,但只有一般图层样式出现在屏幕上,尽管我在通过调试器。
map.addInteraction( drawInter = new ol.interaction.Draw({
features: drawLayer.getFeatures(),
type: "Polygon"
})
);
drawInter.on('drawend', function(e) {
var style = new ol.style.Style({
fill: new ol.style.Fill({ color: newColor })
});
var features = drawLayer.getFeatures().getArray();
var last = features.length-1;
features[last].setStyle(style);
});
您调用 setStyle
的地图项不是刚刚绘制的地图项。这就是为什么刚刚绘制的特征没有预期的样式。 (考虑到您的代码,我真的很惊讶该功能在绘图完成后仍然存在于地图上。)
您的代码在多个方面是 incorrect/strange:
阅读您的代码听起来您认为每次调用向量层 returns 上的 getFeatures
同一个数组。事实并非如此。每次调用 getFeatures
实际上 returns 一个新数组。
您将特征数组传递给 Draw 交互(通过 features
选项)。这是不正确的。 features
选项应该是 ol.Collection
.
在 drawend
回调中,事件对象(代码中的 e
)包含对绘制要素 (e.feature
) 的引用。
所以,如果你想将绘制的特征持久化到一个矢量图层中,你可以使用以下方法:
var draw = new ol.interaction.Draw({
type: 'Polygon',
source: drawLayer.getSource()
});
draw.on('drawend', function(e) {
var style = new ol.style.Style({
// ...
});
e.feature.setStyle(style);
});
map.addInteraction(draw);
我正在使用 ol.Interaction.Draw
在地图上绘制多边形。我想在绘制后对各个特征进行样式设置。
当我检测到 DRAWEND
事件时,我尝试将样式附加到最后绘制的要素,但只有一般图层样式出现在屏幕上,尽管我在通过调试器。
map.addInteraction( drawInter = new ol.interaction.Draw({
features: drawLayer.getFeatures(),
type: "Polygon"
})
);
drawInter.on('drawend', function(e) {
var style = new ol.style.Style({
fill: new ol.style.Fill({ color: newColor })
});
var features = drawLayer.getFeatures().getArray();
var last = features.length-1;
features[last].setStyle(style);
});
您调用 setStyle
的地图项不是刚刚绘制的地图项。这就是为什么刚刚绘制的特征没有预期的样式。 (考虑到您的代码,我真的很惊讶该功能在绘图完成后仍然存在于地图上。)
您的代码在多个方面是 incorrect/strange:
阅读您的代码听起来您认为每次调用向量层 returns 上的
getFeatures
同一个数组。事实并非如此。每次调用getFeatures
实际上 returns 一个新数组。您将特征数组传递给 Draw 交互(通过
features
选项)。这是不正确的。features
选项应该是ol.Collection
.在
drawend
回调中,事件对象(代码中的e
)包含对绘制要素 (e.feature
) 的引用。
所以,如果你想将绘制的特征持久化到一个矢量图层中,你可以使用以下方法:
var draw = new ol.interaction.Draw({
type: 'Polygon',
source: drawLayer.getSource()
});
draw.on('drawend', function(e) {
var style = new ol.style.Style({
// ...
});
e.feature.setStyle(style);
});
map.addInteraction(draw);