我是OL的新手。
如果我按下特定图层中的特定项目,我需要实现一个应该发生的逻辑。
我必须声明我不是从头开始编写项目,而且我实际上继承了一个非常基本但复杂的系统。
系统从MapGuide 2.5获取图层。
这是地图的启动方式:
var map = new ol.Map({
loadTilesWhileInteracting:true,
layers: this.layers,
target: this._element[0],
controls: controls,
interactions: interactions,
view: view
});
view.fit(that.extent, map.getSize());
我尝试添加一个精选互动 - 它没有用(我的承诺从未被调用过)。
var select_interaction = new ol.interaction.Select();
select_interaction.getFeatures().on("add", function (e) {
var feature = e.element; //the feature selected
});
map.addInteraction(select_interaction);
我试过了:
map.on('click', function (evt) {
var feature = map.forEachFeatureAtPixel(evt.pixel,
function (feature, layer) {
debugger;
this.log("fff")
});
});
在这种情况下,承诺有效,但我没有任何功能。
修改
我也尝试过:
var feature = map.forEachLayerAtPixel(evt.pixel,
function (feature, layer) {..}
但我得到例外:
uncaught security error: Failed to execute 'getImageData' on 'CanvasRenderingContext2D': The canvas has been tainted by cross-origin data. ol.js:341
我该怎么做?
谢谢, IDO
答案 0 :(得分:0)
当我尝试通过forEachLayerAtPixel
方法在像素处循环图层时,我遇到了同样的错误。
感谢@kagelos评论,我设法通过过滤图层并仅循环遍历 Vector 图层来解决问题。
图层类型在OL中大致分为两类。图像图层(图块等)和矢量图层。您必须检查作为地图构造函数中的参数传递的this.layers的内容,并查看它包含的图层类型。您只能直接与矢量类型图层进行交互。
以下是最终代码:
Map.forEachLayerAtPixel( cursorPosition, function ( _layer ) {
// you will get the vector layer here
}, this, function ( _layer ) {
if ( _layer instanceof ol.layer.Vector ) {
return true;
}
});