我在代码中使用openlayers。我想选择单个功能,在这种情况下,我使用ol.interaction.Select
:
selectInteraction = new ol.interaction.Select({
layers: [vector_kml],
style: selected_style,
hitTolerance: 25,
});
在下一步中,我分配了事件selectInteraction.on('select', function(e) {...}
和selectInteraction.getFeatures()
方法可以正常工作,并返回具有单个特征对象的数组。在代码的另一部分中,我想取消选择此功能。我发现我应该使用.clear()
方法,但就我而言,它不起作用:
var features = selectInteraction.getFeatures();
selectInteraction.getFeatures().clear();
我还发现getFeatures.push(feature)
不起作用。我没有收到任何错误-只是没有效果。
您有什么想法为什么它不起作用?
如果我对您的理解正确,它应该可以如你所说的那样工作。请看一下我为您检查的示例,以了解您在做什么。
<!doctype html>
<html lang="en">
<head>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/openlayers/openlayers.github.io@master/en/v6.3.1/css/ol.css"
type="text/css">
<style>
.map {
height: 400px;
width: 100%;
}
</style>
<script src="https://cdn.jsdelivr.net/gh/openlayers/openlayers.github.io@master/en/v6.3.1/build/ol.js"></script>
<title>OpenLayers example</title>
</head>
<body>
<div id="map" class="map"></div>
<script type="text/javascript">
// vector layer
var style = new ol.style.Style({
image: new ol.style.Circle({
radius: 5,
fill: null,
stroke: new ol.style.Stroke({
color: 'red',
width: 2
})
})
});
var features = [
new ol.Feature({ geometry: new ol.geom.Point(ol.proj.fromLonLat([37.3, 8.7])) }),
new ol.Feature({ geometry: new ol.geom.Point(ol.proj.fromLonLat([37.3, 8.9])) }),
new ol.Feature({ geometry: new ol.geom.Point(ol.proj.fromLonLat([37.5, 8.7])) }),
new ol.Feature({ geometry: new ol.geom.Point(ol.proj.fromLonLat([37.5, 8.9])) })
];
var source = new ol.source.Vector({
features
});
// map
var map = new ol.Map({
target: 'map',
layers: [
new ol.layer.Tile({
source: new ol.source.OSM()
}),
new ol.layer.Vector({
source,
style
})
],
view: new ol.View({
center: ol.proj.fromLonLat([37.4, 8.8]),
zoom: 10
})
});
// interaction
var select = new ol.interaction.Select();
map.addInteraction(select);
var i = 0;
setInterval(function () {
// console.log('interval');
select.getFeatures().clear();
select.getFeatures().push(features[(i + 1) % 4]);
i++;
}, 500);
</script>
</body>
</html>