代码之家  ›  专栏  ›  技术社区  ›  Malebolgea

Openlayers 4:从阵列加载功能

  •  0
  • Malebolgea  · 技术社区  · 7 年前

    所以,我对JS很陌生。

            for (var i = 0, len = Layers.length; i < len; i++) {
                var mExtent = ol.proj.transformExtent(Layers[i].BoundingBox[0].extent, 'EPSG:4326', 'EPSG:3857');
    
                var X = mExtent[0] + (mExtent[2]-mExtent[0])/2;
                var Y = mExtent[1] + (mExtent[3]-mExtent[1])/2;
    
      var iconFeature = new ol.Feature({
        geometry: new ol.geom.Point([X, Y]),
        name: Layers[i].Title,
        layername: Layers[i].Name,
        description: Layers[i].Abstract
      });                
      var iconStyle = new ol.style.Style({
        image: new ol.style.Icon(/** @type {olx.style.IconOptions} */ ({
          anchor: [0.5, 46],
          anchorXUnits: 'fraction',
          anchorYUnits: 'pixels',
          src: ortho
        }))
      });
    
      iconFeature.setStyle(iconStyle);
    
      var vectorSource = new ol.source.Vector({
        features: [iconFeature]
      });
    
    var vectorLayer = new ol.layer.Vector({source: vectorSource, zIndex: 100 });
    layers2[i] = vectorLayer
                }
    

    var map = new ol.Map({
        layers:[BaseLayers, POI, layers2],    
        target: document.getElementById('map')
    });
    

    我的layers2功能阵列没有显示在地图上。 如果我尝试在控制台中手动添加此功能阵列:

    map.addLayer(layers2)
    

    我发现以下错误:

    TypeError: a.addEventListener is not a function
    

    但如果我尝试手动调用数组中的元素,如下所示:

    map.addLayer(layers2[0])
    

    它工作得很好。 我的包含基本层的数组(OSM+mapbox)运行良好。 我很确定我的数组类型有问题。

    谢谢你过来。

    尝试将我的所有功能、rgb层和底图放在单个阵列“层”中。

    layers2[i] = vectorLayer;
    

    layers.push(vectorLayer);
    

    其中“层”已包含所有其余层对象。 调用地图时,地图上没有“vectorLayer”功能。 使用map在控制台中手动调用“层”时。addLayer(层)仍然会出现相同的错误。 map.addLayer(layers[2]) 例如,它出现了。

    1 回复  |  直到 7 年前
        1
  •  0
  •   Sumanth Shastry    7 年前

    通过查看代码 layers2 是一个层数组。创建时 ol.Map layers

    [基本层,POI,[层[0],层2[1],…]

    var map = new ol.Map({
        layers:[BaseLayers, POI],    
        target: document.getElementById('map')
    });
    
    for ( var i=0; i<layers2.length; i++ ) {
       map.addLayer(layers2[i]);
    };
    

    解决方案2 BaseLayers POI 第2层 第2层 .