使用 forEachFeatureAtPixel 方法从多个层获取信息
Get information from several layers using forEachFeatureAtPixel method
我想从多个层获取信息,我使用的是 forEachFeatureAtPixel 方法,但是当我得到结果时我只得到第一个结果,在浏览器响应中,我看到 JSON 它returns 有更多结果。当我使用 getFeaturesAtPixel 方法时,我通过一个 FOR 循环得到所有结果。但是现在我不知道如何得到所有的结果。
map.on("click", function (evt) {
var result = map.forEachFeatureAtPixel(evt.pixel, function (feature, layer) {
return { feature, layer };
});
if (result) {
var feature = result.feature;
var layer = result.layer;
if (layer === vec01) {
contINFO.innerHTML = '<b>One name:' + feature.get('one_name') + '<b>'
}else if (layer === vec02) {
contINFO.innerHTML = '<b>Other name:' + feature.get('other_name') + '</b><b>Percent: ' + feature.get('percent') + '</b>'
}
}
});
在回调中返回任何真值将停止对第一个特征的检测。要获得所有特征,请不要 return 一个值并从每个特征构建结果
const info1 = document.getElementById("info1");
map.on("click", function (evt) {
var info1Count = 0;
var contCount = 0;
map.forEachFeatureAtPixel(evt.pixel, function (feature, layer) {
var info1HTML = '';
var contHTML = '';
if (layer === vec01) {
info1HTML = JSON.stringify(
Object.entries(feature.getProperties()).filter(function (entry) {
return entry[0] !== "geometry";
})
);
contHTML = '<b>One name: ' + feature.get('one_name') + '<b>'
}else if (layer === vec02) {
info1HTML = JSON.stringify(
Object.entries(feature.getProperties()).filter(function (entry) {
return entry[0] !== "geometry";
})
);
contHTML = '<b>Other name:' + feature.get('other_name') + '</b><b>Percent: ' + feature.get('percent') + '</b>'
}
if (info1HTML != '') {
if (info1Count == 0) {
info1.innerHTML = '';
} else {
info1.innerHTML += '<br>';
}
info1.innerHTML += info1HTML;
info1Count ++;
}
if (contHTML != '') {
if (contCount == 0) {
contINFO.innerHTML = '';
} else {
contINFO.innerHTML += '<br>';
}
contINFO.innerHTML += contHTML ;
contCount++;
}
});
});
我想从多个层获取信息,我使用的是 forEachFeatureAtPixel 方法,但是当我得到结果时我只得到第一个结果,在浏览器响应中,我看到 JSON 它returns 有更多结果。当我使用 getFeaturesAtPixel 方法时,我通过一个 FOR 循环得到所有结果。但是现在我不知道如何得到所有的结果。
map.on("click", function (evt) {
var result = map.forEachFeatureAtPixel(evt.pixel, function (feature, layer) {
return { feature, layer };
});
if (result) {
var feature = result.feature;
var layer = result.layer;
if (layer === vec01) {
contINFO.innerHTML = '<b>One name:' + feature.get('one_name') + '<b>'
}else if (layer === vec02) {
contINFO.innerHTML = '<b>Other name:' + feature.get('other_name') + '</b><b>Percent: ' + feature.get('percent') + '</b>'
}
}
});
在回调中返回任何真值将停止对第一个特征的检测。要获得所有特征,请不要 return 一个值并从每个特征构建结果
const info1 = document.getElementById("info1");
map.on("click", function (evt) {
var info1Count = 0;
var contCount = 0;
map.forEachFeatureAtPixel(evt.pixel, function (feature, layer) {
var info1HTML = '';
var contHTML = '';
if (layer === vec01) {
info1HTML = JSON.stringify(
Object.entries(feature.getProperties()).filter(function (entry) {
return entry[0] !== "geometry";
})
);
contHTML = '<b>One name: ' + feature.get('one_name') + '<b>'
}else if (layer === vec02) {
info1HTML = JSON.stringify(
Object.entries(feature.getProperties()).filter(function (entry) {
return entry[0] !== "geometry";
})
);
contHTML = '<b>Other name:' + feature.get('other_name') + '</b><b>Percent: ' + feature.get('percent') + '</b>'
}
if (info1HTML != '') {
if (info1Count == 0) {
info1.innerHTML = '';
} else {
info1.innerHTML += '<br>';
}
info1.innerHTML += info1HTML;
info1Count ++;
}
if (contHTML != '') {
if (contCount == 0) {
contINFO.innerHTML = '';
} else {
contINFO.innerHTML += '<br>';
}
contINFO.innerHTML += contHTML ;
contCount++;
}
});
});