Openlayers 4:从数组加载功能

时间:2017-08-01 03:02:02

标签: javascript arrays openlayers-3

所以,我对JS很陌生。 我在rgb图层的中心创建了标记为标记的功能,并使用以下代码将它们分配给数组:

        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)的数组运行正常。 我很确定我的数组类型有问题。 但不知道是什么。

感谢您的光临。

修改1

试图将我的所有功能,rgb图层和底图放在一个数组&#34; layers&#34;中。 所以代码在

的第一个循环中发生了变化
layers2[i] = vectorLayer;

要:

layers.push(vectorLayer);

其中&#34;层&#34;已包含所有其余图层对象。 在调用地图时 - 没有&#34; vectorLayer&#34;功能就在上面。 在调用&#34; layers&#34;在map.addLayer(图层)的控制台中手动仍然得到相同的错误。 在调用特定&#34; vectorLayer&#34;例如,map.addLayer(layers[2])的功能 - 它会显示起来。

1 个答案:

答案 0 :(得分:0)

通过查看代码layers2是一个层数组。虽然创建ol.Map对象layers属性应该是单维数组,但在您的代码中它是一个二维数组,如下所示。这就是它给出错误的原因。

  

[BaseLayer,POI,[layers [0],layers2 [1],.....]]

解决方案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 :将BaseLayersPOI插入layers2,然后通过仅声明ol.Map来配置layers2