GetFeatures.clear () и .pu sh () нет результата в ol.interaction.Select - PullRequest
1 голос
/ 17 июня 2020

Я использую в своем коде открытые слои. Я хотел бы выбрать одну функцию, и в этом случае я использую 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) не работает. Ошибок не получаю - просто никакого эффекта.

Есть идеи, почему не работает?

1 Ответ

0 голосов
/ 17 июня 2020

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

<!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>
...