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 30 March 2010 14:59

tiolebucheron
Participant actif
Lieu: Rouen
Date d'inscription: 26 Mar 2006
Messages: 147

Openlayer-GeoEXT : WMSGetFeatureInfo et GeoExt.Action

Bonjour

Je cherche à récupérer l'objet feature que l'utilisateur à sélection par le click. Je me suis basé sur cet exemple http://openlayers.org/dev/examples/getf … ntrol.html

L'évènement ne se déclenche pas, Je ne comprend le problème. L'objectif final est d'actionner le control au click du bouton et le désactiver au second click.

Merci Tio.

Code:

    infoControls = new OpenLayers.Control.WMSGetFeatureInfo({
        url: 'http://" + serveur + "/cgi-bin/mapserv', 
        title: 'Identify features by clicking',
        layers: [ccDGD],
        queryVisible: true,
        eventListeners:{
            getfeatureinfo: function(event){
                console.log(event);
                outline.addFeatures(event.features);
                outline.redraw();
            }
        }
    });

    map.addControl(infoControls);
    infoControls.activate();


    action = new GeoExt.Action({
        text: "select",
        id: "featureinfo",
        control: infoControls,
        map: map,
        toggleGroup: "draw",
        tooltip: "select feature",
        group:"draw"
    });
    topbarItems.push(action);

Hors ligne

 

#2 Thu 15 April 2010 09:26

tiolebucheron
Participant actif
Lieu: Rouen
Date d'inscription: 26 Mar 2006
Messages: 147

Re: Openlayer-GeoEXT : WMSGetFeatureInfo et GeoExt.Action

BOnjour

Je reviens sur mon problème que je n'ai toujours pas résolut.
Je suis repartit de l'exemple de Openlayers http://openlayers.org/dev/examples/getf … ntrol.htmlcar il y avait la fonction activate qui pourrait me permettre de déactivé l'action.
Voici mon code.

Code:

    ccDGD = new OpenLayers.Layer.WMS(
        "dgd",
        "http://" + serveur + "/tilecache/tilecache.py",
        {layers: 'dgd', format: 'image/png'},
        {isBaseLayer: false,
        projection:"EPSG:27572",
        reproject: false }
    );
    ccDGD.setVisibility(true);
    map.addLayer(ccDGD);

infoControls = {
        click: new OpenLayers.Control.WMSGetFeatureInfo({
            url: "http://" + serveur + "/cgi-bin/mapserv", 
            title: 'Identify features by clicking',
            layers: [ccDGD],
            queryVisible: true
        })
    };
    infoControls.click.events.register("getfeatureinfo", this, getdgd);
    map.addControl(infoControls.click); 
    infoControls.click.activate();

function getdgd(evt) {
    outline.addFeatures(evt.features); 
}

Le mapfile de la couche

LAYER
        NAME "dgd"
    STATUS ON
        TYPE POLYGON
    CONNECTIONTYPE postgis
    CONNECTION "host=localhost port=5432 dbname=WEBDATA_NORM user=servdev password=nrwwfua9"
        DATA "the_geom from document_gestion_durable USING UNIQUE proid USING SRID 27572"
        TEMPLATE "infowms.html"
        CLASS
            STYLE
                OUTLINECOLOR 0 0 0
            END
        END
        PROJECTION
            "init=epsg:27572"
        END
        METADATA
            "id_attribute_string" "proid"
            "wms_title" "Document de Gestion Durable"
            "wms_srs" "EPSG:27572"
            "wms_featureid" "proid"
            "wms_include_items" "proid,the_geom"
        END
    END


L'évènement ne se déclenche pas; Pouvez vous me où se trouve le problème.
Merci de votre aide
Tio

Hors ligne

 

#3 Fri 23 April 2010 10:54

tiolebucheron
Participant actif
Lieu: Rouen
Date d'inscription: 26 Mar 2006
Messages: 147

Re: Openlayer-GeoEXT : WMSGetFeatureInfo et GeoExt.Action

Bonjour

J'ai trouvé une solution avec toutefois un bug; Première chose j'ai crée dans couche postgis une colonne contenant la version text du polygone.

Pour l'action

Code:

// Bouton permettan d'ajouter un DGD à la couche polygon
    map.events.register('click', map, function (e) {
        if (Ext.getCmp('featureinfo').pressed) {
            var url = ccDGD.getFullRequestString({
                REQUEST: "GetFeatureInfo",
                EXCEPTIONS: "application/vnd.ogc.se_xml",
                BBOX: ccDGD.map.getExtent().toBBOX(),
                X: e.xy.x,
                Y: e.xy.y,
                INFO_FORMAT: 'text/plain',
                QUERY_LAYERS: ccDGD.params.LAYERS,
                WIDTH: ccDGD.map.size.w,
                HEIGHT: ccDGD.map.size.h},"http://" + serveur + "/cgi-bin/mapserv");
            
            OpenLayers.loadURL(url, '', this, getdgd);
            OpenLayers.Event.stop(e);
        }
        else{
            OpenLayers.Event.stop(e);
        }
    });
    action = new GeoExt.Action({
        tooltip: "Ajouter un DGD à la couche dessin",
        iconCls: "add",
        id: "featureinfo",
        toggleGroup: "draw",
        allowDepress: false,
        group:"draw"
    });
    topbarItems.push(action);

Il reste une erreur; Quand on active le bouton il met this.control is undefined en effet il n'y a pas de dans la définition du bouton. A votre qu'est ce que je peux mettre comme control.

Merci de votre aide Tio


Finit

Il suffit de mettre le bouton est Ext.Action.

Dernière modification par tiolebucheron (Fri 23 April 2010 11:38)

Hors ligne

 

Pied de page des forums

Powered by FluxBB