[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