Openlayers 4:从数组加载特征
Openlayers 4: loading features from array
所以,我对 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 图层和底图放在一个数组中 "layers"。
所以代码在第一个循环中从
layers2[i] = vectorLayer;
收件人:
layers.push(vectorLayer);
其中 "layers" 已包含所有其余图层对象。
调用地图时 - 上面没有 "vectorLayer" 个特征。
在控制台中使用 map.addLayer(layers) 手动调用 "layers" 时仍然会出现相同的错误。
例如,当使用 map.addLayer(layers[2])
调用特定的 "vectorLayer" 功能时 - 它显示了。
看代码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:将 BaseLayers
和 POI
插入 layers2
,然后通过仅声明 layers2
配置 ol.Map
].
所以,我对 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 图层和底图放在一个数组中 "layers"。 所以代码在第一个循环中从
layers2[i] = vectorLayer;
收件人:
layers.push(vectorLayer);
其中 "layers" 已包含所有其余图层对象。
调用地图时 - 上面没有 "vectorLayer" 个特征。
在控制台中使用 map.addLayer(layers) 手动调用 "layers" 时仍然会出现相同的错误。
例如,当使用 map.addLayer(layers[2])
调用特定的 "vectorLayer" 功能时 - 它显示了。
看代码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:将 BaseLayers
和 POI
插入 layers2
,然后通过仅声明 layers2
配置 ol.Map
].