#1 Tue 01 May 2012 10:42
- Winsclav
- Participant occasionnel
- Lieu: ÉfA
- Date d'inscription: 15 Feb 2012
- Messages: 23
[GeoServer+OpenLayers] Affichage d'attributs simples
Bonjour à tous,
J'ai un problème que je n'arrive pas à résoudre. J'essaye de réutiliser les exemples que proposent GeoServer ou OpenLayers pour la visualisation de données attributaires via GetFeatureInfo, mais cela bloque à chaque fois.
J'ai fait une copie du code que GeoServer propose pour la prévisualisation des couches (avec OpenLayers), mais je n'arrive pas à le faire tourner pour mon cas perso.
Ça se présente comme ça :
Code:
<html> <head> <script src="http://<>/web/openlayers-2.11/OpenLayers.js"></script> <script type="text/javascript"> function init(){ var bounds = new OpenLayers.Bounds(-2000, -2000, 2000, 2000); var options = {controls: [], maxExtent: bounds, maxResolution: 5, projection: "EPSG:2100", units: 'm'}; var map = new OpenLayers.Map('map', options); var wms4 = new OpenLayers.Layer.WMS( "at_delos", "http://<>:8080/geoserver/wms", {layers: 'at_delos', format: 'image/png', service: 'WMS', version: '1.1.1', request: 'GetMap', srs: 'EPSG:2100', bbox:'-527.36,-36.07,82.02,732.58', width: '800', height: '800'}); var wms = new OpenLayers.Layer.WMS( "courbe2", "http://<>:8080/geoserver/wms", {layers: 'delos:courbe2_fus', format: 'image/png', service: 'WMS', version: '1.1.1', request: 'GetMap', srs: 'EPSG:2100', bbox: '-228.22,635.84,241.77,1245.84', width: '800', height: '800', transparent: true}); map.addLayer(wms); map.addLayer(wms4); //code servant à l'appel des attributs map.events.register('click', map, function (e){ document.getElementById('nodelist').innerHTML = "..."; alert("salut1"); var params = { REQUEST: "GetFeatureInfo", EXCEPTIONS: "application/vnd.ogc.se_xml", BBOX: map.getExtent().toBBOX(), SERVICE: "WMS", INFO_FORMAT: 'text/html', QUERY_LAYERS: map.layers[0].params.LAYERS, FEATURE_COUNT: 50, Layers: 'at_delos', WIDTH: map.size.w, HEIGHT: map.size.h, format: 'image/png', styles: map.layers[0].params.STYLES, srs: map.layers[0].params.SRS}; alert("salut2"); // handle the wms 1.3 vs wms 1.1 madness if(map.layers[0].params.VERSION == "1.3.0") { params.version = "1.3.0"; params.j = e.xy.x; params.i = e.xy.y; } else { params.version = "1.1.1"; params.x = e.xy.x; params.y = e.xy.y; } alert("salut3"); // merge filters if(map.layers[0].params.CQL_FILTER != null) { params.cql_filter = map.layers[0].params.CQL_FILTER;} if(map.layers[0].params.FILTER != null) { params.filter = map.layers[0].params.FILTER;} if(map.layers[0].params.FEATUREID) { params.featureid = map.layers[0].params.FEATUREID;} alert("salut4"); OpenLayers.loadURL("http://<>:8080/geoserver/wms", params, this, setHTML, setHTML); OpenLayers.Event.stop(e); }); } </script> </head> <body onload="init()"> <div id="map" style="width: 800px; height: 800px"></div> <div id="scale"></div> <div id="scaleBar"></div> <div id="nodelist"></div> </body> </html>
Tous mes messages d'alerte passent, mais en utilisant Firebug pour Firefox, j'obtiens un message d'erreur : "setHTML is not defined".
Avez-vous une idée du pourquoi et du comment régler ce problème ? Je ne sais pas si c'est à cause d'une erreur que j'écris ou bien s'il manque un élément dans mon code. Je bloque depuis pas mal de jours à essayer de réutiliser ce que GeoServer fait très bien, sans succès.
Merci pour votre aide.
ps: la même question a été posée sur forumsig à cette adresse..
Dernière modification par Winsclav (Tue 01 May 2012 10:45)
Hors ligne
#2 Thu 03 May 2012 17:49
- Erwan Trémiot
- Participant occasionnel
- Lieu: Dun sur Auron
- Date d'inscription: 14 May 2007
- Messages: 14
Re: [GeoServer+OpenLayers] Affichage d'attributs simples
Bonjour Winsclav,
il semblerait qu'il manque la fonction setHTML dans ton code. Si tu reprends le code généré par l'outil de prévisualisation OpenLayers dans Geoserver, il y a la fonction suivante
function setHTML(response){
document.getElementById('nodelist').innerHTML = response.responseText;
};
Cette fonction récupère le contenu renvoyé par Geoserver lors du getFeatureInfo et l'insère dans la div nodelist.
Cordialement.
Erwan
Hors ligne
#3 Sun 01 July 2012 12:27
- Winsclav
- Participant occasionnel
- Lieu: ÉfA
- Date d'inscription: 15 Feb 2012
- Messages: 23
Re: [GeoServer+OpenLayers] Affichage d'attributs simples
Solution trouvée : abandonner cette idée et faire autre chose.
Code:
var infowms = new OpenLayers.Control.WMSGetFeatureInfo({ url: URL_WMS, title: 'Identify features by clicking', queryVisible: true, eventListeners: { getfeatureinfo: function(event) { map.addPopup(new OpenLayers.Popup.FramedCloud( "ident", map.getLonLatFromPixel(event.xy), null, event.text, null, true )); } } }); map.addControl(infowms);
Ça, ça marche impec' !
Hors ligne