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

Posted

技术标签:

【中文标题】获取已在 OpenLayers 3 中单击的图层的特征属性【英文标题】:Get a feature properties for the layer which has been clicked in OpenLayers 3 【发布时间】:2016-02-05 11:16:09 【问题描述】:

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

【问题讨论】:

至少对我来说,不清楚你想要什么。也许你想要一个图层过滤器?见gis.stackexchange.com/a/127072/50718。 我看到并尝试了它.. 但它只为我放入过滤器的图层提供了属性,如果我点击另一个图层,它不会提供任何属性。在我单击的同一个像素中,我在彼此下方具有三个特征,当我单击最高层的一个特征时,我想要在这一层中为我提供此特征的属性,而不是像素中特征的所有预定义,是现在清楚了吗? 并非如此。也许你把它放在了小提琴上。 【参考方案1】:

您不能为每一层指定单击,而是根据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);
  
;

片段未测试

【讨论】:

以上是关于获取已在 OpenLayers 3 中单击的图层的特征属性的主要内容,如果未能解决你的问题,请参考以下文章

GeoServer中配置的图层使用OpenLayers为啥读不出来

openlayers6实现webgl点图层渲染效果(附源码下载)

ArcGis10怎么添加一个新的图层

Openlayers 3 forEachLayerAtPixel 只获取层

在点击时从多个Geoserver图层获取要素属性 - 打开图层3

地理服务器中的图层未显示在 OpenLayers 中