获取已在 OpenLayers 3 中单击的图层的要素属性
Get a feature properties for the layer which has been clicked in OpenLayers 3
我正在使用 Geoserver 开发 OpenLayers 3,我有四个矢量图层,我正在使用 singleclick
事件来获取每个要素的属性并在弹出窗口中显示它们 window。
现在我的问题是,当我点击最高层的一个特征时,我得到了所有较低层的所有属性,我使用了 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.
因此,如果您的 return 值是在第一次调用回调时获得的,您将获得您点击的第一个功能:
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);
}
};
代码段未测试
我正在使用 Geoserver 开发 OpenLayers 3,我有四个矢量图层,我正在使用 singleclick
事件来获取每个要素的属性并在弹出窗口中显示它们 window。
现在我的问题是,当我点击最高层的一个特征时,我得到了所有较低层的所有属性,我使用了 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.
因此,如果您的 return 值是在第一次调用回调时获得的,您将获得您点击的第一个功能:
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);
}
};
代码段未测试