Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何删除OpenLayers 5中的图形?_Javascript_Node.js_Drawing_Openlayers - Fatal编程技术网

Javascript 如何删除OpenLayers 5中的图形?

Javascript 如何删除OpenLayers 5中的图形?,javascript,node.js,drawing,openlayers,Javascript,Node.js,Drawing,Openlayers,我正在使用OpenLayers创建一个允许用户在上面绘制的地图。 绘图选项是从正式文档中实现的,可以执行。 我试图给用户一个选项来删除他以前的图形。 按住A键可以看到用户选择。 现在,应在释放键的瞬间删除此选定图形,但什么也没有发生 var select = new Select(); window.addEventListener('keydown', function (event) { // A if (event.keyCode == 65) { ma

我正在使用OpenLayers创建一个允许用户在上面绘制的地图。 绘图选项是从正式文档中实现的,可以执行。

我试图给用户一个选项来删除他以前的图形。 按住A键可以看到用户选择。 现在,应在释放键的瞬间删除此选定图形,但什么也没有发生

var select = new Select();

window.addEventListener('keydown', function (event) {
    // A
    if (event.keyCode == 65) {
        map.addInteraction(select);
    }
});
window.addEventListener('keyup', function (event) {
    if (event.keyCode == 65) {
        var selectedFeatures = select.getFeatures();
        selectedFeatures.clear();
        map.removeInteraction(select);
    }
});

我错过了什么?

因为我失去了发表评论的声誉,所以我不得不将此作为答案发布。 首先,keyCode是,现在您应该只使用event.key,这也使代码更清晰,因为键只是一个

另一个问题是,您可以通过select.getFeatures获取所选的功能,它可以返回功能或集合,请参见。该要素没有明确的方法,但可以获取图层,然后从其源中删除选定要素。这可能看起来像这样:

var selectSource = select.getLayer(selectedFeature).getSource();
selectSource.removeFeature(selectedFeature);

也就是说,假设您选择单个功能,否则您可以循环选择的功能。

因为我没有发表评论的声誉,所以我必须将此作为答案发布。 首先,keyCode是,现在您应该只使用event.key,这也使代码更清晰,因为键只是一个

另一个问题是,您可以通过select.getFeatures获取所选的功能,它可以返回功能或集合,请参见。该要素没有明确的方法,但可以获取图层,然后从其源中删除选定要素。这可能看起来像这样:

var selectSource = select.getLayer(selectedFeature).getSource();
selectSource.removeFeature(selectedFeature);

也就是说,假设您选择一个功能,否则您可以循环选择的功能。

我尝试了一种新方法,但从未开始工作。选择=新选择;map.addInteractionselect;select.on'select',函数e{var count=e.target.getFeatures.getLength;alertcount;e.target.getFeatures.setMapnull;};基本上我认为你也有同样的问题。getFeatures返回一个功能数组,该数组没有该方法。请注意,这些功能也没有该方法。首先,感谢您迄今为止的帮助。如何将选择功能与vector.getSource.clear相结合;.clear方法从源代码中删除所有功能,这真的是您想要的吗?否则,您应该尝试源的.removeFeatureFeature方法。我认为您可以让用户选择多个功能,因此您应该在功能集合中迭代从原始问题中选择的功能。功能集合基本上就是一个包含功能的数组,您可以使用for循环调用source.removeFeature-method,如上所述。除非您想立即清除整个源代码,否则我不会担心.clear方法。我尝试了一种新方法,但从未开始工作。选择=新选择;map.addInteractionselect;select.on'select',函数e{var count=e.target.getFeatures.getLength;alertcount;e.target.getFeatures.setMapnull;};基本上我认为你也有同样的问题。getFeatures返回一个功能数组,该数组没有该方法。请注意,这些功能也没有该方法。首先,感谢您迄今为止的帮助。如何将选择功能与vector.getSource.clear相结合;.clear方法从源代码中删除所有功能,这真的是您想要的吗?否则,您应该尝试源的.removeFeatureFeature方法。我认为您可以让用户选择多个功能,因此您应该在功能集合中迭代从原始问题中选择的功能。功能集合基本上就是一个包含功能的数组,您可以使用for循环调用source.removeFeature-method,如上所述。除非您想立即清除整个源代码,否则我不会担心.clear方法。