Как удалить функцию в openlayers с несколькими возможными источниками - PullRequest
0 голосов
/ 01 апреля 2019

У меня есть карта с несколькими слоями, все из которых подключены к разным векторным источникам.

Когда пользователь выбирает объект, я хочу, чтобы он мог удалить объект.Тем не менее, я не могу найти способ найти исходный слой, из которого эта функция.

Если я пытаюсь просто удалить объект со всех слоев, я получаю сообщение об ошибке:

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

Есть ли хороший способ найти исходный слой или удалить объекты, не указав откуда?

В данный момент я ловлю исключения, но это становится громоздким с большим количеством слоев и источников.

1 Ответ

2 голосов
/ 02 апреля 2019

Для каждого источника вы можете попытаться получить выбранную функцию.Если ответ не 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;
    }
  }
})
...