[Users] LayerTree in Drake

Andreas Hocevar ahocevar at opengeo.org
Mon Feb 16 18:34:25 CET 2009


Alexandre Dube wrote:
> Hi,
> 
>  Please, correct me if I'm wrong, but it seems that the only current 
> possible way to have an extra level "GROUP" is to have one OL layer 
> object per group, have them in a hard coded tree of filteredLayerNode, I 
> am right ?

Not necessarily hard-coded, because it can be configured using a JSON 
object, one that you may be able to generate as MapServer template. But 
yes, every OpenLayers.Layer.WMS would be represented by a 
filteredLayerNode. See below.

>>>> - I want to have one Openlayer.Layer.WMS object only
>>>> - That layer should contain all "layers" from a mapfile, so 
>>>> params.LAYERS should looks like "foo1,foo2,foo3,etc..."
>>>> - I have so many layers in that mapfile (around 70 I think) that I 
>>>> must find a way to build a tree by :
>>>> GROUP
>>>>       
>>> This is already possible with LayerNode
>>>     
>>
>> I looked but didn't quite understand.  Do you have an example showing 
>> the use of groups ?

Group1: filteredLayerNode
  |-- layerParam1: cqlFilterNode
  |-- layerParam2: cqlFilterNode

In json config, it would look like this:

{
     "nodeType": "olFilteredLayer",
     "layer": "Group 1",
     "children": [
         {
             "nodeType": "olCqlFilter",
             "text": "Layer Param 1",
             "filter": "layerParam1"
         },
         {
             "nodeType": "olCqlFilter",
             "text": "Layer Param 2",
             "filter": "layerParam2"
         }
     ]
}

Regards,
Andreas.


>>
>>  
>>>> LAYER
>>>>       
>>> There is something similar that I have created, but this changes the 
>>> layer's CQL_FILTER param instead of the LAYERS param: a 
>>> FilteredLayerNode [1] instead of a LayerNode for the GROUP, and 
>>> CqlFilterNodes [2] for the LAYERs. If you look at [2], you see that 
>>> only two lines would have to change for this functionality (currently 
>>> L54-58):
>>>
>>> if(filters.length == 0) {
>>>     // (not needed) delete this.attributes.layer.params.CQL_FILTER;
>>> } else {
>>>     newParams = {"LAYERS": filters};
>>> }
>>>
>>> So it seems that the FilteredLayerNode can be made more generic with 
>>> two new config options, one for the param to change and one for the 
>>> concatenation string (not required in the case of ","). The 
>>> CQLFilterNode is already generic enough to support that, but could 
>>> use more generic variable and event names.
>>>
>>>    
>>>> and then, if possible, display the CLASS icon as a legend
>>>>       
>>> Tim Coulter is currently working on a tree node that can display a 
>>> legend graphic (e.g. from a GetLegendGraphic request) [3], but this 
>>> is not fully functional yet.
>>>
>>>    
>>>> - Using a mapserver query in mode=legend with a html template that 
>>>> outputs javascript objects, I generate an array of groups that has 
>>>> layers.
>>>>       
>>> You could create a Tree configuration, as shown in [4] when clicking 
>>> on "Show/Edit Tree Config".
>>>
>>>    
>>>> - Using that array, I must find a way to build a model for the ext.tree
>>>>       
>>> Not required if you look at [4], if you manage to create a valid tree 
>>> config with your mapserver template.
>>>
>>>    
>>>> - In the end, I would have my tree, and clicking on a group would 
>>>> refresh the OL.Layer.WMS with all the "layers" names the group 
>>>> contains...
>>>>       
>>> exactly!
>>>
>>>    
>>>> In mapfish, when you give no model to the tree, it builds its own 
>>>> and when, using OL.Layer.WMS or MapServer, you define an array of 
>>>> params.LAYERS instead of a string, it automatically generate a model 
>>>> by "layers" in the mapfile. That's what I want but with a level of 
>>>> GROUPS and maybe, if possible, display the CLASS icons as a legend.
>>>>
>>>> So that's about it. It's a bit hard to explain more. Can GeoExt 
>>>> achieves what I want ?
>>>>       
>>> As you can see, the CLASS stuff is being worked on (you might to 
>>> support Tim here), and the Layer/Group stuff is as easy as changing 
>>> two lines of code in the short term, and making a few things more 
>>> generic by more or less just changing names in the long term.
>>>
>>> Regards,
>>> Andreas.
>>>
>>> [1] 
>>> http://projects.opengeo.org/who/browser/ems/trunk/lib/WHO/FilteredLayerNode.js 
>>>
>>> [2] 
>>> http://projects.opengeo.org/who/browser/ems/trunk/lib/WHO/CqlFilterNode.js 
>>>
>>> [3] 
>>> http://geoext.org/trac/geoext/browser/sandbox/opengeo/drake/trunk/core/lib/GeoExt/widgets/tree/WMSLegendNode.js 
>>>
>>> [4] http://demo.opengeo.org/ems/examples/gx-tree-demo.html
>>>
>>>    
>>>> Christopher Schmidt wrote:
>>>>      
>>>>> On Sat, Feb 14, 2009 at 11:52:52AM +0100, Andreas Hocevar wrote:
>>>>>  
>>>>>        
>>>>>> Alexandre Dube wrote:
>>>>>>            
>>>>>>> Nevermind.
>>>>>>>
>>>>>>> What I want to do will be easier in MapFish ( I think ).
>>>>>>>
>>>>>>> I want to have one Openlayer.Layer.WMS with a tree like this :
>>>>>>>
>>>>>>> Groups
>>>>>>>  |__Layers
>>>>>>>      |__Class
>>>>>>>                   
>>>>>> I think I'm missing something here. What would such a tree do to 
>>>>>> one WMS layer? Or are you talking about a nested WMS layer. In 
>>>>>> that case, I would be interested to see the GetCapabilities for 
>>>>>> this layer.
>>>>>>               
>>>>> I'm not sure I understand the "Layers", "Class" stuff, but I think 
>>>>> that
>>>>> in general, there is a desier to have multiple WMS Layers (from the
>>>>> GetCaps) merged into one Layer.WMS -- so when you turn on two layers,
>>>>> instead of two OpenLayers.Layer classes, you have one with a
>>>>> 'layers':'abc,123'.
>>>>>
>>>>> Regards,
>>>>>           
>>>>       
>>>     
>>
>>
>>   
> 
> 


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


More information about the Users mailing list