Mehr

Skripting-Getfeatureinfo für mehrere WMS-Ebenen


Ich bin kein wirklicher Programmierer und versuche, einen Webservice zu erstellen. Ich habe einige Skriptbeispiele kopiert und eingefügt, die mein Skript zu dem gemacht haben, was es jetzt ist. Ich habe mehrere wms-Ebenen, möchte aber für jede wms unterschiedliche Informationen im Infofenster anzeigen. Also dachte ich, dies kann durch eine Wenn-dann-sonst-Anweisung erfolgen. Zuerst habe ich die Variable getfeatureinfo erstellt, einschließlich der Ebenen, die Informationen anzeigen müssen.

var control_identify = new OpenLayers.Control.WMSGetFeatureInfo({ title : 'Klik op een lijn voor information', layer : [ AmiceHerkomst, AmiceVerwerking ], queryVisible : true, infoFormat : 'application/vnd.ogc.gml', provider .Params: { : 5 // Geoserver-Puffer in Pixel }, eventListeners : { getfeatureinfo : function(event){ showInfo(event); } } }); control_identify.events.register("getfeatureinfo", this, showInfo);

dann erstelle ich die showinfo-Funktion. Hier möchte ich für jede WMS-Ebene, die ich habe, ein Wenn-Dann-Sonst erstellen. Etwas in der Zeile if(evt.features.length != 0) und layer = AmiceHerkomst { gefolgt von den Attributen, die ich von diesem Layer haben möchte. Für den nächsten Layer füge ich am Ende else if (evt.features.length != 0) und layer = AmiceVerwerking { mit den gewünschten Attributen für diesen Layer und so weiter hinzu. Scripting, wie ich oben sagte, gibt einen Fehler aus, aber ich denke, so etwas sollte möglich sein?

Funktion showInfo (evt) {var f = 0; var temstr = ""; if(evt.features.length != 0){ for (f = 0; f <= evt.features.length - 1; f++) { temstr = temstr + ""; for ( var key in evt.features[f].attributes) { temstr += ""; Schalter (Taste){ case 'afvalstroo': temstr += ""; break; case 'plaatsloca': temstr += ""; Pause; Standard: }; temstr += ""; } temstr = temstr + "
Afvalstroom" + evt.features[f].attributes[key] + "Plaatsnaam" + evt.features[f].attributes[key] + "
"; }; log("Informationen
" + temstr, true); } else { log("Informationen
" + "Niets gevonden op deze locatie", true); } }

Sie können zum Antwortformat JSON wechseln und die Antwortfunktionen durchlaufen:

info = new OpenLayers.Control.WMSGetFeatureInfo({ url: 'http://demo.opengeo.org/geoserver/wms', title: 'Features durch Anklicken identifizieren', queryVisible: true, infoFormat : 'application/json', DrillDown : true, eventListeners: { getfeatureinfo: function(event) {; retrieved_response=JSON.parse(event.text); retrieved_objects=retrieved_response.features; if(retrieved_objects.length>0) { for(var i=0;i
"+loop_layer_id+"
STATE: "+abgerufene_Objekte[i].properties.STATE+"
"; } else if(loop_layer_id=="tasmania_roads") { popuphtml=popuphtml+"
"+loop_layer_id+"
TYPE: "+abgerufene_Objekte[i].properties.TYPE+"
"; } else if(loop_layer_id=="tasmania_water_bodies") { popuphtml=popuphtml+"
"+loop_layer_id+"
WaterTYPE: "+abgerufene_objects[i].properties.WATER_TYPE+"
"; } sonst { popuphtml=popuphtml+"
andere Inhalte"+"
"; } } //console.log(popuphtml); map.addPopup(new OpenLayers.Popup.FramedCloud( "chicken", map.getLonLatFromPixel(event.xy), null, popuphtml , null, true )); } else { alert("keine Antwort…"); } } } }); map.addControl(info); info.activate();


Schau das Video: scripts lol (Oktober 2021).