GetFeatures.clear()和.push()不会导致ol.interaction.Select

问题描述 投票:1回答:1

我在代码中使用openlayers。我想选择单个功能,在这种情况下,我使用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)不起作用。我没有收到任何错误-只是没有效果。

您有什么想法为什么它不起作用?

javascript openlayers
1个回答
0
投票

如果我对您的理解正确,它应该可以如你所说的那样工作。请看一下我为您检查的示例,以了解您在做什么。

<!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>
© www.soinside.com 2019 - 2024. All rights reserved.