Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#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

 

Pied de page des forums

Powered by FluxBB