Удалить слой в Openlayers

#asp.net #openlayers

#asp.net #openlayers

Вопрос:

Я добавил маркеры, добавив слой в OpenLayers. Я использую его в своем проекте asp, загружаю карту и могу добавлять несколько значков. Теперь я загружаю свои местоположения и показываю их с помощью этих значков. Мой код выглядит следующим образом:

 for (var i = 0; i < loc.length; i  ) {
        LocationArray.push(loc[i]);
        iconFeature = new ol.Feature({
            geometry: new ol.geom.Point(ol.proj.fromLonLat(loc[i])),
            name: 'Null Island',
            population: 4000,
            rainfall: 500
        });
        iconFeatures.pop();
        debugger
        iconFeatures.push(iconFeature);
        vectorSource = new ol.source.Vector({
            features: iconFeatures //add an array of features
        });

        iconStyle = new ol.style.Style({
            image: new ol.style.Icon(({
                anchor: [0.5, 100],
                anchorXUnits: 'fraction',
                anchorYUnits: 'pixels',
                opacity: 0.8,
                src: '/images/icon.png',

            }))
        });
        vectorLayer = new ol.layer.Vector({
            source: vectorSource,
            style: iconStyle
        });

        map.addLayer(vectorLayer);
    }
  

Теперь я хочу удалить этот слой, когда я нажимаю на него.
Я могу определить, где на него нажали, и я отвечаю на это, но я не знаю, как я могу его удалить.
Мой код выглядит следующим образом:

 map.on('click', function (evt) {
        var feature = map.forEachFeatureAtPixel(evt.pixel, function (feature) {
            return feature;
        });
        if (feature) {
            var coordinates = feature.getGeometry().getCoordinates();
            if (confirm("Do you want to delete?")) {
                
              // What should I code here?

            }
        } else {
          // .....
        }
  });
  

Ответ №1:

forEachFeatureAtPixel Обратный вызов также может получить слой, если вы сохраните, что слой легко удалить:

 map.on('click', function (evt) {
        var vectorLayer;
        var feature = map.forEachFeatureAtPixel(evt.pixel, function (feature, layer) {
            vectorLayer = layer;
            return feature;
        });
        if (feature) {
            var coordinates = feature.getGeometry().getCoordinates();
            if (confirm("Do you want to delete?")) {
                
              map.removeLayer(vectorLayer);

            }
        } else {
          // .....
        }
  });
  

Ответ №2:

Если вы хотите сохранить слой, но удалить маркеры, вы можете использовать метод clear().

 vectorLayer.getSource().clear();
  

Ответ №3:

Спасибо за ответ, я нашел его по map.removeLayer(layer); коду