javascript - 如何删除具有多个可能来源的 openlayers 中的功能

标签 javascript openlayers openlayers-5

我有一个包含多个图层的 map ,所有图层都连接到不同的矢量源。

当用户选择某个功能时,我希望他能够删除该功能。但是,我似乎无法找到一种方法来定位该功能所在的源层。

如果我尝试从所有图层中删除该功能,则会收到错误:

Vector.js:946 Uncaught TypeError: Cannot read property 'forEach' of undefined
at Vector.removeFeatureInternal (Vector.js:946)

有没有一种好的方法可以在不指定从哪里的情况下查找源层或删除功能?

目前我正在捕获异常,但是对于很多层和源来说这变得很笨拙。

最佳答案

对于每个来源,您可以尝试获取所选的功能。如果响应不为 null,则该功能存在于该源上。 在你的选择中沿着这条路的东西:

const featureId = selectedFeature.getId()
map.getLayers().getArray().forEach(layer => {
  const source = layer.getSource();
  if (source instanceof VectorLayer) {
    const featureExists = source.getFeatureById(featureId);
    if (featureExists) {
      source.removeFeature(selectedFeature);
      return;
    }
  }
})

关于javascript - 如何删除具有多个可能来源的 openlayers 中的功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55457329/

相关文章:

使用 openlayer 和 geocodezip 示例进行鼠标位置显示和地理定位的 javascript sode

javascript - WKT 和开放层

openlayers - 使用 map 缩放更改图标大小

javascript - JQuery - 从 Selectbox 中删除所有选项,除了 first 和 selected

javascript - 指定 jQuery 选择器引用的 HTML 页面?

javascript - 如何通过 "setInterval"kick ass pass scope

javascript - 在回调上运行循环,node js

javascript - 如何使用 OpenLayers 从 Geoserver 访问私有(private)层?

javascript - 向标记添加文本(功能)

openlayers - 获取要加载的图 block 总数