Javascript 如果OpenLayers中存在重叠或相同几何图形,如何选择哪个要素覆盖
我创建了一张地图,在地图中,单击这些特征可以打开一个覆盖图。但我有一个问题,如果有多个特征重叠,或者更糟,当特征具有相同的几何体时 我使用此代码来显示覆盖。但当两个要素具有相同的几何图形时,仅显示一个覆盖Javascript 如果OpenLayers中存在重叠或相同几何图形,如何选择哪个要素覆盖,javascript,openlayers,openlayers-3,Javascript,Openlayers,Openlayers 3,我创建了一张地图,在地图中,单击这些特征可以打开一个覆盖图。但我有一个问题,如果有多个特征重叠,或者更糟,当特征具有相同的几何体时 我使用此代码来显示覆盖。但当两个要素具有相同的几何图形时,仅显示一个覆盖 const overlayContainerElement = document.querySelector('.overlay-container'); const overlayLayer = new ol.Overlay ({ element: overlayC
const overlayContainerElement = document.querySelector('.overlay-container');
const overlayLayer = new ol.Overlay ({
element: overlayContainerElement
});
map.addOverlay(overlayLayer);
const overlayFeatureName = document.getElementById('feature-name');
const overlayFeatureAdditionalinfo = document.getElementById('feature-additionalinfo');
map.on('click', function(e){
overlayLayer.setPosition(undefined);
map.forEachFeatureAtPixel(e.pixel, function (feature, layer){
let clickedCoordinate = e.coordinate;
let clickedFeatureName = feature.get('Number')
let clickedFeatureInfo = feature.get('Text');
overlayLayer.setPosition(clickedCoordinate);
overlayFeatureName.innerHTML = clickedFeatureName;
overlayFeatureAdditionalinfo.innerHTML = clickedFeatureInfo;
},
{
layerFilter: function(layerCandidate){
if (layerCandidate.get('title') === "Title") {
return 1;
}
}
})
});
你知道如何配置一种方式来选择我想要查看的功能细节吗?因此,单击后,如果鼠标下有两个功能,将显示一种列表来选择我要打开的覆盖图。您可以使用
map.forEachFeatureAtPixel
方法来收集所有单击的功能,而不是在map.forEachFeatureAtPixel
方法中更新覆盖图,然后使用一系列功能
类似这样的内容(未测试/未完成):
您可以让覆盖图以“摘要”方式显示结果列表,单击其中一个要素名称(例如)可以在覆盖图中显示其全部详细信息
HTH谢谢。我使用了带有
功能的“摘要”。加入。但是我如何通过单击来显示全部详细信息?有什么有趣的功能吗?没有。那应该是你自己设计的一部分。换句话说,您必须弄清楚如何以您选择的方式在覆盖中一次显示多个功能,并在需要时显示更多细节。例如,可以为功能列表渲染手风琴,并在单击时使每个项目都可展开以显示整个细节。
var features = [];
map.forEachFeatureAtPixel(e.pixel, function (feature, layer){
features.push(feature);
},
{
layerFilter: function(layerCandidate){
if (layerCandidate.get('title') === "Title") {
return 1;
}
}
});
// And then, you could iterate on your features and show information as a list in your overlay.
// todo - loop here
/*
let clickedCoordinate = e.coordinate;
let clickedFeatureName = feature.get('Number')
let clickedFeatureInfo = feature.get('Text');
overlayLayer.setPosition(clickedCoordinate);
overlayFeatureName.innerHTML = clickedFeatureName;
overlayFeatureAdditionalinfo.innerHTML = clickedFeatureInfo;
*/