Как динамически добавлять несколько векторных слоев в группу слоев в ol6?

#javascript #openlayers #openlayers-6

#javascript #openlayers #openlayers-6

Вопрос:

Я хочу динамически добавлять слои в layergroup одним нажатием кнопки. Я добавил слой OSM

 var map = new Map({
  target: 'map',
  layers: [
    new TileLayer({
      title: 'OSM',
      source: new OSM(),
      opacity: 0.5,
    })
  ]
  });
  
  
  //--On button click--
  var yearcmpGrp = new LayerGroup({
      title: 'Year Comparison',
      layers: []
  });
  map.addLayer(yearcmpGrp); //this add a new layergroup
    
    for(var i=fromyr;i<=toyear;i  ){
       var sampledata = data;
       var samplevectorlyr = new VectorLayer({
          title:i,
          source: new VectorSource({
            features: new GeoJSON().readFeatures(sampledata, {
                dataProjection: 'EPSG:32643',
                featureProjection: 'EPSG:32643',
            }),
          }),
          style: new Style({
            image: new Circle({
                radius: 7,
                fill: new Fill({color: colorpick[i]}),
                stroke: new Stroke({
                  color: [255,0,0], width: 2
                })
              })
          }),
          opacity: 0.5,
        });
         //map.addLayer(samplevectorlyr); //this works fine amp; add a new layer outside layer group
         map.getLayerGroup(yearcmpGrp).addLayer(samplevectorlyr); //This don't work !!
    } 
  

Я хочу добавить несколько слоев в layergroup в цикле for. map.getLayerGroup(yearcmpGrp).addLayer(samplevectorlyr) не работает

Комментарии:

1. map.getLayerGroup() возвращает только базовую группу слоев карты. Чтобы добавить в известную группу слоев, нажмите на ее коллекцию слоев yearcmpGrp.getLayers().push(samplevectorlyr);

2. это сработало. как я могу удалить эту layergroup перед нажатием другой кнопки? map.removeLayer(yearcmpGrp); не работает. как использовать pop()

3. Это сработало для удаления слоя, если (mapp.getLayers().getLength() > 1) mapp.getLayers().pop(); Из вашего другого ответа gis.stackexchange.com/questions/306935 /… 🙂 ты великолепен

Ответ №1:

Это сработало

yearcmpGrp.getLayers().push(samplevectorlyr);

Спасибо @Mike. Я отправляю в качестве ответа bcz, это может кому-то помочь.