使用此函数,我获得了可以解析的LayerGroup列表,并识别出我想要的Group“Runs”。
在此之前它正在发挥作用。
但var length = layers.getLength
始终返回0
。
function getActiveLayer(layerName, picID) {
// get layerGroups
var layers = map.getLayers();
var length = layers.getLength(),
l;
for (var i = 0; i < length; i++) {
l = layers.item(i);
var lt = l.get('title');
// check for layers within groups
if (lt === 'Runs') { // Title of Group
// get layers from Runs
var layers = l.getLayers();
//get length
var length = layers.getLength(),
l;
if (length > 0) {
for (var i = 0; i < length; i++) {
l = layers.item(i);
var lt = l.get('title');
// check for Layer Title
if (lt === layerName) { // Title if Layer
var innerLayers = l.getSource().getFeatureById(picID).getGeometry().getCoordinates();
return innerLayers;
}
}
}
}
}
};
getLayers from map and LayerGroup
上面一个是来自地图的getLayers。 较低的是来自“运行”的getLauers。
有人可以解释为什么长度是实际的0?l
修改
我更新了代码:
function getActiveLayer(layerName, picID) {
// get layerGroups
var layers = map.getLayers();
var length = layers.getLength();
for (var i = 0; i < length; i++) {
l = layers.item(i);
var lt = l.get('title');
// check for layers within groups
if (lt === 'Runs') { // Title of Group
// get layers from Runs
var layers = l.getLayers().getArray();
//get length
var length2 = layers.getLength();
console.log(length2);
if (length > 0) {
for (var i = 0; i < length2; i++) {
l = layers.item(i);
var lt = l.get('title');
// check for Layer Title
if (lt === layerName) { // Title if Layer
var innerLayers = l.getSource().getFeatureById(picID).getGeometry().getCoordinates();
return innerLayers;
}
}
}
}
}
};
的console.log(长度2);仍然是0。
答案 0 :(得分:0)
var length = layers.getLength(), l;
这是一个可怕的代码,你很可能没有故意这样做。另见:comma separator 在这个位置,你可能只想从l:
获得长度 var length = l.getLength();
你构建了一个特别讨厌的片段。运行以下代码。你可能希望它循环3次 - 它没有。
javascript中没有块级别范围,只有功能级别范围,因此var x=y
内的for
不会仅为for块定义变量,但为整个函数定义变量。
查看变量阴影问题,explain the issue详细说明。 使用唯一的变量名称。永远不要尝试变量阴影,这是非常糟糕的做法!
function badpractice(number) {
var length = number;
console.log('length before loop', length);
for(var i=0;i < length;i++){
console.log('length before for assign', length);
var length = i;
console.log('length after for assign', length);
}
console.log('length after loop', length);
};
badpractice(3);
答案 1 :(得分:0)
我找到了解决方案。你走了:
function getActiveLayer(layerName,picID) {
var layers = map.getLayers();
var length = layers.getLength();
for (var i = 0; i < length; i++) {
l = layers.item(i);
var lt = l.get('title');
// check for layers within groups
if (lt === 'Runs') { // Title of Group
var layers = l.getLayers().getArray();
var length = l.getLayers().getArray().length;
// loop over layers
for (var i = 0; i < length; i++) {
l = layers[i];
var lt = l.get('title');
// check for Layer Title
if (lt === layerName) { // Title if Layer
var innerLayers = l.getSource().getFeatureById(picID).getGeometry().getCoordinates();
return innerLayers; // return coord of feature
}
}
}
}
};