2016-10-06 8 views
2

マップをクリックして異なるオーバーレイレイヤーを取得したいので、ユーザーがポップアップでフィーチャー情報を取得したいレイヤーを選択できるようにしたい。 map.forEachFeatureAtPixelを使用していますが、オーバーレイされたレイヤーを1つだけ取得します。OL3:座標でオーバーレイされたレイヤーを取得する

var prue=[]; 
layers=[] 
var displayFeatureInfo = function(pixel) { 
var feature = map.forEachFeatureAtPixel(pixel, function(feature, layer) { 


    l=layer.get('name'); 
    console.log("CAPA:",l) 
    layers.push(l); 
    console.log(layers); 




    if (layer == rustic_wfs){ 
    var capa= "rustica"; 
    prue[0]=capa; 
    return feature;}; 

    if (layer == zonas_wfs){ 
    var capa="zonas"; 
    prue[0]=capa; 
    return feature;} 


    }); 

    map.on('click', function(evt) { 
    displayFeatureInfo(evt.pixel); 
    }); 

答えて

1

このような何か試してみてください:それは私がol.Map#forEachFeatureAtPixelがすべてと呼ばれるポップアップに

+0

ソースまたはレイヤーを保存してループしてみましたが、問題はまだ残っています。 2つのオーバーレイされたレイヤーをクリックすると、そのレイヤーの1つだけが認識されます。この機能がこの目的のためのプロッパーではないかもしれませんか? – Crisemar

+0

ループに戻り、ループを壊し、他のレイヤーを続行しない、つまりループが1回だけ繰り返される場合は、「リターン機能」を参照してください。この機能をアレイに保存することをお勧めします。 "var layerinfo = {features:features、layers:layer}"と "layers.push(layerinfo)"のように、ループ仕上げ後にすべてのレイヤーとすべてのフィーチャーを取得できます – RaZoDiuM

2

を示したような方法で、「オーバーレイ」と「内容」を無視

function displayFeatureInfo(evt) { 
    var txt = ""; 

    olMap.forEachFeatureAtPixel(evt.pixel, function (feature, source) { 

     //In the feature is the information of layer 
     //In the source is the layer 

     //you can save the "source" in you array to get all layers 

     var features = feature.getProperties(); 

     Object.getOwnPropertyNames(features).forEach(function (campo, idx, array) { 

      var valor = features[campo]; 

      txt += "<b>" + campo + ":</b> " + valor + "<br />";   
     }); 

     var coordinate = evt.coordinate; 

     content.innerHTML = "<p style='padding: 0px'><b>Información:</b></p>" + txt + "<br/>"; 
     txt += "<br/>------------------------<br/><br/>"; 
     overlay.setPosition(coordinate); 
    }); 
}; 

をスニペット(return feature)で行う真理値を返すまで、提供されたピクセルの特徴を表示します。だから、すべての機能を得るためには真実の価値を返すことはありません。関数は次のようなものにする必要があります。

var layers = []; 
map.forEachFeatureAtPixel(pixel, function(feature, layer) { 
    if (layers.indexOf(layer) == -1) { 
    layers.push(layer); 
    } 
}); 
関連する問題