[Users] Question on using WMS GetLegendGraphic with a GeoExt.tree.LayerNode

Andrew Stewart Andrew.Stewart at reddeer.ca
Wed Nov 24 17:02:12 CET 2010


Hi Andreas for your suggestion. I am still having some difficulties with the parameters for this.. Except when I issue the same request in my browser I am getting the correct legend graphic returned but when I run it through the code I am getting nothing showing up.

I modified my code to this - 

        //Labels layerlist
        layerList_Labels = new GeoExt.tree.LayerNode({
        "layer": layer_Labels,
        "isLeaf": true,
        "checked": false,
        "enableDD": true,
        "cls": "rootnode",
        "singleClickExpand": true,
       "listeners": 
        {
            'checkchange' :  function(node, checked)
            {
            // If a parent node is unchecked, uncheck all the children
            if (node.getUI().isChecked()) {
                node.expand();
            }
            if (!node.getUI().isChecked())
            {
                node.collapse();
            }
    }
  },
       loader: {
    param: "LAYERS",
    createNode: function(attr) {
        attr.icon = "http://localhost/WebServices/Request.aspx?request=GetLegendGraphic&version=1.1.1&format=image/png&style=&layer="+attr.text
        alert(attr.icon);
        return GeoExt.tree.LayerParamLoader.prototype.createNode.apply(this, arguments);
    }
 }
        });

And nothing shows up.. However if I copy the url of attr.icon and paste this in my browser I do see the correct legend graphic for the legend entry. Should I change this around because my childnodes are not expanded first on initial load? I have also tried to add the style= and it didn't seem to have any affect or make it stop working either. Thanks again for the help.



-----Original Message-----
From: Andreas Hocevar [mailto:ahocevar at opengeo.org] 
Sent: November 24, 2010 1:49 AM
To: Andrew Stewart
Cc: users at geoext.org
Subject: Re: [Users] Question on using WMS GetLegendGraphic with a GeoExt.tree.LayerNode

Hi,

your GetLegendGraphic request string misses some required parameters ("STYLES" at least, IIRC), and you probably want to remove "Asphalt" at the end of the string.

Regards,
Andreas.

On Nov 23, 2010, at 15:16 , Andrew Stewart wrote:

> Thanks for the advice. I tried to use the code with my paramloader but it doesn't seem to be working, is there something I am missing? -
> 
> layerList_Base = new GeoExt.tree.LayerNode({
>        "layer": layer_Base,
>        "isLeaf": true,
>        "checked": false,
>        "enableDD": true,
>        "cls": "rootnode",
>        "singleClickExpand": true,
>        "listeners": {
>        'checkchange' :  function(node, checked)
>            {
>            // If a parent node is unchecked, uncheck all the children
>            if (node.getUI().isChecked()) {
>                node.expand();
>            }
>            if (!node.getUI().isChecked())
>            {
>                node.collapse();
>            }
>    }
>  },
>        "loader": {
>            "param": "LAYERS",
>            createNode: function(attr) {
>                attr.icon = "http://localhost/WebServices/Request.aspx?request=GetLegendGraphic&version=1.1.1&format=image/png&layer=Asphalt"+attr.text;
>                return GeoExt.tree.LayerParamLoader.prototype.createNode.apply(this,arguments);
>                }
> 
>        }
>        });
> 
> 
> layerRoot_Legend.appendChild(layerList_Base);
> 
> 
> -----Original Message-----
> From: users-bounces at geoext.org [mailto:users-bounces at geoext.org] On Behalf Of Andreas Hocevar
> Sent: November 23, 2010 2:18 AM
> To: Andrew Stewart
> Cc: users at geoext.org
> Subject: Re: [Users] Question on using WMS GetLegendGraphic with a GeoExt.tree.LayerNode
> 
> Hi,
> 
> the easiest way is to customize your loader with a createNode method. Inside that method, you set the icon attribute to the location (GetLegendGraphic request) of your image.
> 
> loader: {
>    param: "LAYERS",
>    createNode: function(attr) {
>        attr.icon = "...&reqest=GetLegendGraphic&layers="+attr.text
>        return GeoExt.tree.LayerParamLoader.prototype.createNode.apply(this, arguments);
>    }
> }
> 
> Regards,
> Andreas.
> 
> On Nov 23, 2010, at 01:38 , Andrew Stewart wrote:
> 
>> Sorry to reply so many times to my own post.. but I kinda figured this out. Basically now I am setting the text property of each childnode after expanding to the WMS GetLegendGraphic request and then contatonating that with the text name of the node. Is there a better way to do this.. I am just using the expand event and then redrawing the entire childnodes with new icons.. can I do this before the nodes are even expanded?
>> 
>> 
>> 
>> 
>> 
>> 
>> 
>> 
>> From: users-bounces at geoext.org [users-bounces at geoext.org] On Behalf Of Andrew Stewart [Andrew.Stewart at reddeer.ca]
>> Sent: November 22, 2010 4:22 PM
>> To: users at geoext.org
>> Subject: Re: [Users] Question on using WMS GetLegendGraphic with        a       GeoExt.tree.LayerNode
>> 
>> So I have tried to change the icon of each childNode after the expand event like so -
>> 
>> 
>> 'expand' : {fn: function(node) {
>> var count = (node.childNodes.length -1);
>> while (count >= 0)
>> {node.childNodes[count].setIcon("../images/minus.png");
>> count -=1;
>> }
>> }}
>> 
>> But this does not seem to work, anything else I can try?
>> 
>> 
>> 
>> ________________________________
>> From: users-bounces at geoext.org [mailto:users-bounces at geoext.org] On Behalf Of Andrew Stewart
>> Sent: November 22, 2010 3:51 PM
>> To: users at geoext.org
>> Subject: [Users] Question on using WMS GetLegendGraphic with a GeoExt.tree.LayerNode
>> 
>> Is it possible to show a legend graphic which is returned from my WMS GetLegendGraphic request next to each item on the LayerNode after it is expanded? (or before.. Or whenever as long as it shows).
>> 
>> I declare my layernode like so -
>> 
>> //Trails layerList
>>       layerList_Trails = new GeoExt.tree.LayerNode({
>>       "layer": layer_Trails,
>>       "isLeaf": false,
>>       "checked": false,
>>       "enableDD": true,
>>       "cls": "rootnode",
>>       "singleClickExpand": true,
>>       "listeners": {
>>       'checkchange' :  function(node, checked)
>>           {
>>           // If a parent node is unchecked, uncheck all the children
>>           if (node.getUI().isChecked()) {
>>               node.expand();
>>           }
>>           if (!node.getUI().isChecked())
>>           {
>>               node.collapse();
>>           }
>>   }
>> },
>>       "loader": {
>>           "param": "LAYERS"
>>       }
>>       });
>> 
>> Which is added to my root -
>> layerRoot_Legend.appendChild(layerList_Trails);
>> 
>> And then my treepanel
>> 
>> var layerRoot_Legend = new Ext.tree.TreeNode({
>>       enableDD: true,
>>       text: "All Legend Items",
>>       loaded: true,
>>       expanded: true
>>       });
>> 
>>       var layerTree_Legend = new Ext.tree.TreePanel({
>>       title: '',
>>       root: layerRoot_Legend,
>>       enableDD: true,
>>       applyLoader: true,
>>       rootVisible: false
>>       });
>> 
>> 
>> Except previously when I declared my layers individually I had put an <img> tag with the right layer next to each.. But now I am declaring them in groups like -
>>        //Trails Group
>>        var layer_Trails = new OpenLayers.Layer.WMS("<img src='http://localhost/WebService/Request.aspx?request=GetLegendGraphic&version=1.1.1&format=image/png&layer=Asphalt' alt=''/>Trails", "http://localhost/WebService/Request.aspx",
>>               {
>>        layers: ['Onstreet_Bike_Route', 'Mountain_-_Stunt_Biking', 'Equestrian', 'Gravel_or_Shale', 'Asphalt'],
>>                    VERSION: "1.1.1",
>>                    transparent: true
>>                   },
>>                   { isBaseLayer: false,
>>                     singleTile: true,
>>                     visibility: false,
>>                     buffer: 1,
>>                     ratio: 1
>>                   }
>> But this only puts the image on the actual group name and I need it to be beside each legend entry when it is expanded. Is there a place somewhere I can stick this image tag and either hard code the layer name or have it be returned from the childNodes of the tree and get it to show this image beside each childNode? Appreciate any assistance!
>> 
>> 
>> 
>> ________________________________
>> This e-mail is intended for the original recipient(s) only. If you have received it in error, please advise the sender and delete this message.
>> 
>> ________________________________
>> [This message has been scanned for security content threats and viruses.]
>> 
>> [The City of Red Deer I.T. Services asks that you please consider the environment before printing this e-mail.]
>> 
>> ________________________________
>> This e-mail is intended for the original recipient(s) only. If you have received it in error, please advise the sender and delete this message.
>> 
>> ________________________________
>> [This message has been scanned for security content threats and viruses.]
>> 
>> [The City of Red Deer I.T. Services asks that you please consider the environment before printing this e-mail.]
>> 
>> 
>> 
>> 
>> _______________________________________________
>> Users mailing list
>> Users at 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
> Users at geoext.org
> http://www.geoext.org/cgi-bin/mailman/listinfo/users
> 
> 
> [This message has been scanned for security content threats and viruses.]
> 
> [The City of Red Deer I.T. Services asks that you please consider the environment before printing this e-mail.]
> 
> 
> 
> 
> _______________________________________________
> Users mailing list
> Users at geoext.org
> http://www.geoext.org/cgi-bin/mailman/listinfo/users

-- 
Andreas Hocevar
OpenGeo - http://opengeo.org/
Expert service straight from the developers.



[This message has been scanned for security content threats and viruses.]

[The City of Red Deer I.T. Services asks that you please consider the environment before printing this e-mail.]






More information about the Users mailing list