javascript - 获取已在 OpenLayers 3 中单击的图层的要素属性

标签 javascript openlayers-3 geoserver

我正在使用 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 事件? 有什么帮助吗?

最佳答案

您不能为每个层指定单击,而是根据 api doc of forEachFeatureAtPixel function :

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);
  }
};

代码段未测试

关于javascript - 获取已在 OpenLayers 3 中单击的图层的要素属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35222785/

相关文章:

javascript - openlayer 3.5 从点获取特征ID

javascript - Openlayers 3中心 map

javascript - Linux 上 OpenLayers 3 中的拖动旋转交互

linux - JAI 图像 I/O 的 Posix 变量

javascript - 使用 Node.js 将客户端数据保存在服务器端

javascript - 如何检测 "prevent this page from creating additional dialogs"

javascript - 如何使用javascript动态生成id并将其赋予html SVG中的特定元素?

javascript - jQuery:如何 .show() 具有包含特定文本的类的元素?

javascript - Chrome 的版本会影响 JavaScript 库的行为吗?

apache - 如何在geoserver 2.9中启用CORS?