IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SIG : Système d'information Géographique Discussion :

Filtrer les objets d'une couche WMS par ID


Sujet :

SIG : Système d'information Géographique

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 37
    Points : 17
    Points
    17
    Par défaut Filtrer les objets d'une couche WMS par ID
    Bonjour,

    Je chercher à isoler une zone parmi une couche WMS, grâce par exemple à son ID.

    Exemple ici, et plus précisément

    Je souhaiterai dire à ma requête WMS : "je ne veux que la zone X (parmi les 7/8 que l'on voit)".

    Malheureusement je ne trouve pas de tel paramètre, et je ne sais même pas si cela est possible.
    En WFS peut-être ?

    C'est une question que j'avais posé sur le thread de l'API Géoportail, mais j'utiliserai a priori OpenLayers donc je re-poste ici. Et je mettrai à jour mon poste sur l'API Géoportail en conséquent

    Merci d'avance.

  2. #2
    Membre habitué

    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 101
    Points : 141
    Points
    141
    Par défaut
    C'est possible via le paramètre HTTP "Filter" .

    Je ne suis pas sûr que "Filter" est tout à fait conforme au standard OGC WMS (à priori je dirais oui), mais GeoServer le reconnaît aussi bien pour le WFS (sur une requête GetFeature) que le WMS (sur une requête GetFeatureInfo), avec la même syntaxe.

    OpenLayers a un objet "Filter" qui peut le générer, comme dans le bout de code si dessous (ici le filtre est "sitename LIKE $param") et la requête est envoyé dans de l'AJAX via JQuery).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    
    function search_gaz(param)
    	{
    		var filter=new OpenLayers.Filter.Comparison({ type: OpenLayers.Filter.Comparison.LIKE, property: "sitename", value: param}); 
    		var parser= new OpenLayers.Format.Filter.v1_1_0(); 
    		var filterAsXml=parser.write(filter); 
    		var xml=new OpenLayers.Format.XML(); 
    		var filterAsString=xml.write(filterAsXml);
    		var i=0;
    		var minLat, minLon, maxLat,maxLon;
    		$request=wfs_url+"SERVICE=WFS&VERSION=1.1.1&REQUEST=GetFeature&TYPENAME=monLayer&FILTER="+filterAsString;
    		
    		var request=$.ajax({
      		type: "GET",
      		url: $request,
    		dataType: "xml"
      		});
      		
      		request.done(function(xml) {...});
    
    }
    
    etc...

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 37
    Points : 17
    Points
    17
    Par défaut
    Bonjour,

    Oui j'ai réussi à faire ce que je voulais avec du WFS.

    Voici le code du filtre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    var monFiltre = new OpenLayers.Filter.Comparison({
            type: OpenLayers.Filter.Comparison.EQUAL_TO,
            property: "nom du champs à filtrer",
            value: "valeur à filtrer"
    });
    
    var monStyle = new OpenLayers.StyleMap({
             strokeWidth: 1,
             strokeColor: "#009933",
             strokeOpacity: 1,
             fillColor: "#00CC33",
             fillOpacity: 0.8,
    });
    
    var entite_isole = new OpenLayers.Layer.Vector(pName, {
            strategies: [new OpenLayers.Strategy.Fixed()],
            projection: new OpenLayers.Projection("EPSG:2154"), // dans mon cas
            protocol: new OpenLayers.Protocol.WFS({
                url:  "url WFS",
                featureType: "nom de la couche"
            }),
            styleMap: monStyle ,
            filter: monFiltre 
        });
    
    viewer.getMap().addLayer(entite_isole);

  4. #4
    Membre habitué

    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 101
    Points : 141
    Points
    141
    Par défaut
    Attention si vous utilisez JQuery au moment de parser du XML provenant du WFS, je viens de découvrir que Chrome ne se comporte ^pas de la même façon que les autres browsers

    pour indiquer un chemin dans IE et Firefox:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $(xml).find("namespace\\:monconcept");
    sous Chrome:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $(xml).find("monconcept");

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Filtrer les résultats d'une requête par date courte
    Par Herwin78800 dans le forum Linq
    Réponses: 8
    Dernier message: 11/08/2011, 15h16
  2. [AC-2007] Filtrer les données d'une requête en passant par VBA
    Par Oliv'83 dans le forum VBA Access
    Réponses: 6
    Dernier message: 27/04/2011, 12h07
  3. Réponses: 6
    Dernier message: 26/02/2010, 14h37
  4. [CLI] Filtrer les objets modifiés dans une version Tag
    Par peaceinpal dans le forum Subversion
    Réponses: 2
    Dernier message: 27/01/2009, 10h28
  5. Réponses: 1
    Dernier message: 13/04/2005, 14h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo