Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/408.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如果OpenLayers中存在重叠或相同几何图形,如何选择哪个要素覆盖_Javascript_Openlayers_Openlayers 3 - Fatal编程技术网

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;
        */