获取已在 OpenLayers 3 中单击的图层的特征属性

Get a feature properties for the layer which has been clicked in OpenLayers 3

本文关键字:图层 特征 属性 单击 OpenLayers 获取      更新时间:2023-09-26

我正在使用 Geoserver 开发 OpenLayers 3,我有四个矢量图层,我正在使用singleclick事件来获取每个要素的属性并在弹出窗口中显示它们。

现在我的问题是,当我单击最高层的特征时,我从所有较低层获取所有属性,我使用了forEachFeatureAtPixel但不知道如何为每个图层指定它!

这是我的代码:

var OpenMeters = function (evt) {
content.innerHTML = "";
var feature = map.forEachFeatureAtPixel(evt.pixel,
    function (feature, layer) {
        if (feature) {
            var coord = map.getCoordinateFromPixel(evt.pixel);
            var objeto = feature.getProperties(),propiedades;
            for (propiedades in objeto)
            {
              content.innerHTML += '<b>' + propiedades + '</b> : <i><b>'+ objeto[propiedades]+'</b></i><br />';
            }
            overlay.setPosition(coord);
        } else {
            overlay.setPosition(undefined);
        }
    });
};
map.on('singleclick', OpenMeters);
var select = new ol.interaction.Select();
map.addInteraction(select);

如何为每个图层指定singleclick事件?有什么帮助吗?

您不能为每个图层指定一次单击,但根据 forEachFeatureAtPixel 函数的 api 文档:

Returns:
Callback result, i.e. the return value of last callback execution, or the first truthy callback return value. 

因此,如果您在第一次调用回调时返回一个值,您将获得您命中的第一个功能:

var feature = map.forEachFeatureAtPixel(evt.pixel, function (feature, layer) {
  return feature;    
});
if (feature) {
  var coord = map.getCoordinateFromPixel(evt.pixel);
  var objeto = feature.getProperties(),propiedades;
  for (propiedades in objeto) {
    content.innerHTML += '<b>' + propiedades + '</b> : <i><b>'+ objeto[propiedades]+'</b></i><br />';
    }
    overlay.setPosition(coord);
  } else {
    overlay.setPosition(undefined);
  }
};

代码段未测试