所以,我很新的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提供的解決方案。 –