Suite

Basculement de la visibilité des fonctionnalités dans Openlayers + GeoExt

Basculement de la visibilité des fonctionnalités dans Openlayers + GeoExt


Je mets en place une petite application de cartographie Web à l'aide de PostGIS + mod_tile + FeatureServer + OpenLayers + GeoExt, que j'apprends au fur et à mesure. En plus de la couche de base, j'ai extrait quelques couches vectorielles de FeatureServer, chacune avec de nombreuses fonctionnalités. Par exemple, une demande à mes couches « états » renvoie une fonctionnalité GeoJSON pour chaque État et « districts du Congrès » renvoie une fonctionnalité pour chaque district du Congrès. Je peux rendre ces couches sur la carte et les basculer dans leur intégralité dans une arborescence de couches GeoEXT.

Ce que je voudrais faire (semble) simple : Pour chaque couche, affichez une liste regroupée de toutes les entités dans une arborescence de couches avec des cases à cocher pour basculer la visibilité/le rendu de chaque entité, individuellement. J'ai du mal à trouver un moyen simple de le faire.

Il y avait une question sur la liste de diffusion GeoEXT qui incluait du code pour définir le renderIntent sur « delete » en décochant :

var layerList = new GeoExt.tree.LayerNode({ text: 'The United States', expand: true, layer: usa, // fait référence à une couche vectorielle utilisant le protocole HTTP pour obtenir GeoJSON. leaf: false, children : [{ text : "Alabama", feuille : vrai, fid:1, vérifié : faux },{ texte : "Alaska", feuille : vrai, fid :2, vérifié : faux }, { //… charger d'autres cinquante états }] }) ; var layerTree = new Ext.tree.TreePanel({ title: 'Map Layers', root: layerList, autoScroll:true, listeners: { 'checkchange': function(node, vérifié){ var tempfid = node.attributes.fid; if (coché){ node.parentNode.attributes.layer.getFeatureByFid(tempfid).renderIntent = 'default' ; // Je définis la visibilité avec renderIntent car les styles sont réinitialisés lorsque le calque est redessiné sous forme de panoramique ou de zoom. node.parentNode.attributes. layer.redraw(); }else{ node.parentNode.attributes.layer.getFeatureByFid(tempfid).renderIntent = 'delete'; node.parentNode.attributes.layer.redraw(); } } } });

Je pense qu'il existe un meilleur moyen de le faire (peut-être avec Strategy.Filter ?), mais je n'arrive pas à comprendre. Quelqu'un pourrait-il m'indiquer la bonne direction et/ou des exemples qui incluent cette fonctionnalité ? Merci d'avance pour votre aide!


Cela pourrait t'aider

//créer un TreeNode var treeNode = new Ext.tree.TreeNode({ text: "Treenode", expand:true, bodyStyle: 'background-color:#A4A4A4;' }); //Ajouter des superpositions groupées dans le TreeNode treeNode.appendChild(new GeoExt.tree.OverlayLayerContainer({ text: "Overlay", map: map, expand:true, loader: { filter: function(record) { return record.get(" layer").name.indexOf("area")!== -1; } } }));

s'il y a deux couches de zone avec le nom : Zone de marché & Ag. surface. Les couches de zone doivent apparaître à l'intérieur de l'arborescence "Superposition".


Voir la vidéo: Openlayers 6 Tutorial #9 - Interaction With Vector Features