2016-10-06 1 views
2

Ich möchte verschiedene Overlay-Layer erhalten, indem ich auf die Karte klicke, damit der Benutzer auswählen kann, welche Feature-Informationen über ein Popup-Fenster abgerufen werden sollen. Ich verwende map.forEachFeatureAtPixel, aber ich bekomme nur eine der überlagerten Ebenen.OL3: Überlagern von Layern nach Koordinaten

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

Antwort

1

versuchen, etwas wie folgt aus:

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

Ignorieren "Overlay" und "Inhalt" ist es die Art und Weise, wie ich die Pop-up-

+0

Ich habe versucht, die Quellen oder Ebenen zu speichern und sie dann zu loopen, aber ich denke, das Problem ist immer noch da. Wenn ich auf zwei überlagerte Ebenen klicke, erkenne ich einfach eine davon. Könnte es sein, dass die Funktion für diesen Zweck nicht geeignet ist? – Crisemar

+0

Sehen Sie Ihre "Rückkehr-Funktion", wenn Sie in eine Schleife zurückkehren, bricht es die Schleife und nicht mit den anderen Ebenen weiter, mit anderen Worten, Sie haben nur eine Schleife von 1 Iteration, empfehle ich, die Funktion in Ihrem Array, etwas zu speichern wie "var layerinfo = {features: feature, layers: layer}" und dann "layers.push (layerinfo)", damit man nach dem Schleifenende alle Layer und alle Features abrufen kann – RaZoDiuM

2

Die ol.Map#forEachFeatureAtPixel zeigen mit allen genannt werden Features an dem bereitgestellten Pixel, bis Sie einen truthy Wert zurückgeben, den Sie in Ihrem Snippet (return feature) ausführen. Um also alle Funktionen zu erhalten, geben Sie niemals einen truthy Wert zurück. Die Funktion muss in etwa so aussehen:

var layers = []; 
map.forEachFeatureAtPixel(pixel, function(feature, layer) { 
    if (layers.indexOf(layer) == -1) { 
    layers.push(layer); 
    } 
});