Mais

Script getfeatureinfo para várias camadas wms


Não sou realmente um programador e estou tentando criar um serviço da web. Copiei e colei alguns exemplos de script que tornaram meu script o que é agora. Tenho várias camadas de wms, mas desejo mostrar informações diferentes na janela de informações para cada wms. Então eu pensei que isso pode ser feito por uma instrução if-then-else. Primeiro, criei a variável getfeatureinfo incluindo as camadas que precisam ter as informações mostradas.

var control_identify = new OpenLayers.Control.WMSGetFeatureInfo ({title: 'Klik op een lijn voor informatie', layers: [AmiceHerkomst, AmiceVerwerking], queryVisible: true, infoFormat: 'application / vnd.ogc.gml', vendorParams: {buffer : 5 // buffer do geoserver em pixels}, eventListeners: {getfeatureinfo: function (event) {showInfo (event);}}}); control_identify.events.register ("getfeatureinfo", this, showInfo);

em seguida, crio a função showinfo. Aqui, quero fazer um if-then-else para cada camada wms que tenho. Algo na linha de if (evt.features.length! = 0) e layer = AmiceHerkomst {seguido pelos atributos que desejo dessa camada. Para a próxima camada, adiciono no final else if (evt.features.length! = 0) e layer = AmiceVerwerking {com os atributos que desejo para esta camada e assim por diante. O script como eu disse acima irá gerar um erro, mas eu acho que algo assim deveria ser possível.

função 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 + =""; switch (chave) {case 'afvalstroo': temstr + =""; interromper; case 'plaatsloca': temstr + =""; break; default:}; temstr + ="";} temstr = temstr +"
Afvalstroom"+ evt.features [f] .attributes [tecla] +"Plaatsnaam"+ evt.features [f] .attributes [tecla] +"
"; }; registro("Informatie
"+ temstr, verdadeiro);} else {log ("Informatie
"+" Niets gevonden op deze locatie ", verdadeiro);}}

Você pode mudar para o formato de resposta JSON e iterar por meio dos recursos de resposta:

info = new OpenLayers.Control.WMSGetFeatureInfo ({url: 'http://demo.opengeo.org/geoserver/wms', title: 'Identificar recursos clicando em', 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) {para (var i = 0; i
"+ loop_layer_id +"
ESTADO: "+ recuperados_objetos [i] .properties.STATE +"
";} else if (loop_layer_id ==" tasmania_roads ") {popuphtml = popuphtml +"
"+ loop_layer_id +"
TIPO: "+ recuperado_objetos [i] .properties.TYPE +"
";} else if (loop_layer_id ==" tasmania_water_bodies ") {popuphtml = popuphtml +"
"+ loop_layer_id +"
WaterTYPE: "+ retrieved_objects [i] .properties.WATER_TYPE +"
";} else {popuphtml = popuphtml +"
outro conteúdo "+"
";}} //console.log(popuphtml); map.addPopup (new OpenLayers.Popup.FramedCloud (" chicken ", map.getLonLatFromPixel (event.xy), null, popuphtml, null, true));} else { alert ("sem resposta…");}}}}); map.addControl (info); info.activate ();


Assista o vídeo: 4# Poradnik Quantum Gis Tworzenie warstw wektorowych i ich atrybutów (Outubro 2021).