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

时间:2019-04-01 14:18:29

标签: javascript openlayers openlayers-5

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

当用户选择功能时,我希望他能够删除该功能。但是,我似乎找不到找到该功能来源层的方法。

如果我尝试从所有图层中删除要素,则会收到错误消息:

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

有没有找到来源图层或删除要素的好方法,而无需指定从何处?

此刻,我正在捕捉异常,但这在很多层次和资源上变得笨拙。

1 个答案:

答案 0 :(得分:2)

对于每个来源,您可以尝试获取选定的功能。如果响应不是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;
    }
  }
})