[Users] efficient way to group overlay layers in tree node

78 views
Skip to first unread message

karsten vennemann

unread,
Mar 14, 2012, 6:55:10 AM3/14/12
to us...@geoext.org

Hi All,

 

Using geoext 1.1, what is the best way to filter (or create) a Tree node with non-baselayers (“overlay”) GIS layers and group them ?

 

I have this node but am failing to only show non-baselayers . I even manually created a two stores store that holds the list of layers I would like to have in a tree node

 

        var kartendaten_layer = new Array();  

        kartendaten_layer = [hintergrund,emptylayer,maske,waldbesitzer,waldbesitzer_jahr,waldbesitzer_tile,gemeinde_tile,landkreise_tile,regierungsbezirke_tile,flkgrenzenbayern_tile,annotation];

       

        var schutzgebiete_layer = new Array();  

        schutzgebiete_layer = [nationalparke,vogelschutzgebiete,naturparke,landschaftsschutzgebiete,biosphaerenreservate,naturschutzgebiete,ffh_gebiete,ramsar_gebiete];

       

          

        var kartendaten_layerstore = new GeoExt.data.LayerStore({

            map: map,

            layers: kartendaten_layer

        });

        var schutzgebiete_layerstore = new GeoExt.data.LayerStore({

            map: map,

            layers: schutzgebiete_layer

        });

 

but I still get either the base layers also listed in the node when using gx_layercontainer (see below, and could not cerate a correct filter get rid of base layers see the ??? below)

how could I filter out baselayer e.g. ? Or even use my layer.options.Group  ?

 

or strangely it is not honoring my list of layers and show all overlay layer when using gx_overlaylayercontainer

{nodeType: "gx_layercontainer",

                                      text: 'Kartendaten',

                                      layerStore: kartendaten_layerstore, // mapPanel.layers,

                                      expanded: true,

                                      loader: {

                                                 filter: function(record) {

                                                    ???

                                            },

                                          baseAttrs: {

                                              uiProvider: "custom_ui"

                                          },

                                          createNode: function(attr) {

                                              if (GeoExt.WMSLegend.supports(mapPanel.layers.getByLayer(attr.layer))){

                                                 attr.component = {

                                                     xtype: "gx_wmslegend",

                                                     layerRecord: mapPanel.layers.getByLayer(attr.layer),

                                                     showTitle: false,

                                                     cls: "legend"

                                                 };

                                              }  

                                              return GeoExt.tree.LayerLoader.prototype.createNode.call(this, attr);

                                          }

                                      }   

                                }, …

 

Any suggestions how to make this work ?

Cheers

Karsten

 

Karsten Vennemann

 

Terra GIS Ltd

2119 Boyer Ave E

Seattle, WA 98112

USA

tel ++ 206 905 1711

fax ++ 925 905 1711

 

Andreas Hocevar

unread,
Mar 14, 2012, 11:49:49 AM3/14/12
to karsten vennemann, us...@geoext.org
Hi Karsten,

first of all, you shouldn't be using multiple layer stores, unless
your tree is not meant to be a tree representation of the layers of
your map.

If you only want overlays, you can use a gx_overlaylayercontainer
instead of a gx_layercontainer. Or if you want to use a custom filter,
your filter function would be

filter: function(record) {
return record.getLayer().isBaseLayer === false;
}

Hope this helps,
Andreas.

> _______________________________________________
> Users mailing list
> Us...@geoext.org
> http://www.geoext.org/cgi-bin/mailman/listinfo/users
>

--
Andreas Hocevar
OpenGeo - http://opengeo.org/
Expert service straight from the developers.
_______________________________________________
Users mailing list
Us...@geoext.org
http://www.geoext.org/cgi-bin/mailman/listinfo/users

karsten vennemann

unread,
Mar 14, 2012, 2:51:28 PM3/14/12
to Andreas Hocevar, us...@geoext.org
Thanks works now

>>> first of all, you shouldn't be using multiple layer stores, unless
your tree is not meant to be a tree representation of the layers of
your map.

I changed it back to just one layer store. The baselayer filter below works
to get rid of base layers in that node. I did also successfully filter by
layer option when I set a group option on the layer e.g.

return record.get("layer").group == "Schutzgebiete";

(when the layer has under options this set:
group: "Schutzgebiete"

Karsten


>>> If you only want overlays, you can use a gx_overlaylayercontainer
instead of a gx_layercontainer. Or if you want to use a custom filter,
your filter function would be

filter: function(record) {
return record.getLayer().isBaseLayer === false;
}

Hope this helps,
Andreas.

_______________________________________________

Reply all
Reply to author
Forward
0 new messages