#1 Wed 10 November 2010 21:58
- Delu
- Participant actif
- Lieu: Briançon
- Date d'inscription: 29 Apr 2008
- Messages: 76
filtrer la carte avec geoext
Bonjour,
lorsque l'on sélectionne une ligne dans une grid extjs construite avec comme selection Model le GeoExt.grid.FeatureSelectionModel(), la géométrie correspondante est sélectionnée sur la carte aussi.
Par contre si on filtre ce grid avec la méthode filter() ou filterBy() de Extjs, toutes les géométries restent sur la carte.
Est-ce que qq'un connait une méthode pour provoquer ce filtre et ainsi mettre en adéquation la liste du grid et les objet affiché sur la carte.
voici mon store puis mon grid :
Code:
this.storeNotes = new GeoExt.data.FeatureStore({ layer: this.notes ,fields: [ {name: 'id_note', type: 'integer'} ,{name: 'annee', type: 'integer'} ,{name: 'date_note'} ,{name: 'date_insert'} ,{name: 'commentaire', type: 'string'} ,{name: 'geometry', type: 'string'} ,{name: 'id_auteur',type: 'integer'} ,{name: 'auteur',type: 'string'} ] // ,sortInfo: {field: 'date_note',direction: 'DESC'} });
Code:
gridPanelNotes = new Ext.grid.GridPanel({ id:"gridnotes" ,title: "Vos notes localisées" ,store: this.storeNotes ,columns: [ { header: "N°" ,width: 50 ,dataIndex: "id_note" ,sortable: true ,hidden:true },{ header: "Auteur" ,width: 140 ,dataIndex: "auteur" ,sortable: true },{ header: "Date" ,width: 120 ,dataIndex: "date_note" ,sortable: true },rowActionsCenter ] ,plugins: rowActionsCenter ,sm: new GeoExt.grid.FeatureSelectionModel({singleSelect:true,layer:this.notes}) ,tbar:application.toolbar.toolbarGridNotes });
Je filtre mon store comme ça mais ça ne filtre pas les features sur la carte
Code:
this.storeNotes.filterBy(function(r,id){condition...return true ou false})
Hors ligne
#2 Fri 19 November 2010 09:07
Re: filtrer la carte avec geoext
Bonjour,
Peut-être dois tu mettre à jour la carte avec une méthode redraw() au niveau de la couche vecteur ?
Y.
Yves Jacolin, bénévole de l'association GeoRezo.net, agit au nom et pour le compte de l'association - Partageons ce qui nous départage !! - GeoRezo vous aide ? Aidez GeoRezo !
Hors ligne
#3 Fri 19 November 2010 10:28
- Delu
- Participant actif
- Lieu: Briançon
- Date d'inscription: 29 Apr 2008
- Messages: 76
Re: filtrer la carte avec geoext
Bonjour Yves et merci pour ta réponse.
Je viens de tester ce que tu proposes mais ça ne fonctionne pas.
pour m'en sortir j'ai du écrire une fonction et faire des boucles. Pour ceux qui aurait le même besoin, voici un exemple de code qui fonctionne.
L'application gère des notes localisées, saisies sur le terrain avec un PDA et que les utilisateurs peuvent consulter via une application web, une fois leur note exportées vers postgis via un script automatique (Talend)
application.layout.notes est ma couche vecteur. Je transmets à la fonction, le contenu de 2 critères de filtre : l'auteur de la note et un bout de chaine text à rechercher dans les commentaires de la note.
Code:
this.submitFilter = function(id_auteur,textField) { if(id_auteur!=null){var reg1=id_auteur;} gridPanelNotes.getSelectionModel().clearSelections(); this.storeNotes.filterBy(function(r,id){ var commentaire = r.get('commentaire'); var auteur = r.get('id_auteur'); var id_note = r.get('id_note'); var f = application.layout.notes.features; var match = new RegExp("("+textField+")",'gi').test(commentaire); if(id_auteur!=null){ match = match && (auteur == reg1); } if(match){ Ext.each(f,function(item,index){ if(item.data.id_note == id_note){item.style=null;} }) } else{ Ext.each(f,function(item,index){ if(item.data.id_note == id_note){item.style={display:'none'};} }) } application.layout.notes.redraw(); return match; }) };
Donc je change le style de chacune de mes features (item.style={display:'none'} ou item.style=null) pour les masquer ou les afficher en fonction des résultats du filtre. le monStore.filterBy de Extjs fonctionne avec une fonction qui filtre ou pas les records en fonction de ce que retourne cette fonction (true ou false), d'où le return match à la fin.
Hors ligne