所以,我很新的JS。 我创造了我的RGB层的中央风格作为标记的功能,并将其与该代码分配给数组:Openlayers 4:从数组中加载功能
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')
});
我的图层2功能阵列未显示在地图上。 如果当时我尝试添加在控制台手动此阵的特点:
map.addLayer(layers2)
我获得以下错误:
TypeError: a.addEventListener is not a function
但如果我尝试手动调用从数组中的元素像这样:
map.addLayer(layers2[0])
它工作正常。 我的包含基础层(OSM + mapbox)的阵列工作正常。我很确定我的数组类型有问题。 但是不知道是什么。
感谢您的光临。
编辑1
试图把我的所有功能,RGB层和底图单个阵列中的“层”。 因此,代码在第一循环中变更从
layers2[i] = vectorLayer;
要:
layers.push(vectorLayer);
哪里“层”已经包含了所有其余的层对象。 当调用地图时 - 没有“vectorLayer”功能。 在使用map.addLayer(图层)在控制台中手动调用“图层”时仍然会得到相同的错误。 例如,当调用map.addLayer(layers[2])
的特定“矢量图层”功能时,它会显示出来。
你的评论是正确的。您也可以尝试'图层:BaseLayers.concat(Layers2).concat(POI)'。它应该给你一个单一的所有图层的dimmension数组。 – pavlos
感谢您的回复。 我以前尝试的第一个解决方案,它确实有效,是的,但这是我想避免的。 至于解决方案2 - 我试图把我所有的图层与layers.push(vectorLayer)放在一个数组中。在第一个循环中,并将剩余的图层推送到相同的数组(层) - 但仍然不起作用。 当我尝试调用一个数组中的所有图层的地图时,“vectorLayer”中的要素不会显示出来,并且如果尝试在控制台中再次调用该数组图层,仍会得到相同的错误。 会在第一篇文章中做一些调整。 – Malebolgea
如果您之前已经尝试过,那么当您提问时应该提及它。如果您不想使用解决方案1,请使用2或@Pavlos提供的解决方案。 –