[OpenLayers-Users] mergeNewParams + Legend
Andreas Hocevar
ahocevar at opengeo.org
Fri Aug 6 07:08:00 EDT 2010
Hi,
On Aug 6, 2010, at 12:23 , Sascha Müller wrote:
> Do I understand it right, for every layer (WMS) I create, I have to
> give the WMS layer a StyleMap with a "default" render intent? Because I
> use a VectorLegend?
No. The VectorLegend will only be used *if* the WMS layer has a StyleMap. It will still use WMSLegend for other layers.
> I have in my App, depending on the customer, a different number of
> layers. This sounds like a lot of work for me.
> Or I have to create a VectorLegend specially for the layer with the
> large SLD?
Yes, just for that layer. Only WMS layers that have a styleMap property will get a VectorLegend if you follow my suggestion.
Regards,
Andreas.
>
>>> This will tell VectorLegend that it supports all layers that have a
> styleMap. >> Does it mean, that the Legend accept ONLY layer that have a
> styleMap or accept ALSO layer that have a styleMap?
>
> Another approaches:
> - If I change from SLD_BODY to SLD (with the URL of the SLD) in
> mergeNewParams(), prevents this a too long URI?
> - Is there a way to use 'POST' with GetLegendGraphic?
>
> regards,
>
> Sascha
>
>
>> Hi,
>>
>> I am pretty sure that the request URI is too long. What you could do is reconfigure the legend type selection sequence, so a VectorLegend rather than a WMSLegend is created. A prerequisite is this non-API hack though:
>>
>> GeoExt.VectorLegend.supports = function(layerRecord) {
>> return layerRecord.get("layer").styleMap;
>> };
>>
>> This will tell VectorLegend that it supports all layers that have a styleMap.
>>
>> Now you can go ahead and create your legendPanel like this:
>>
>> var legendPanel = new GeoExt.LegendPanel({
>> preferredTypes: ["gx_vectorlegend"]
>> });
>>
>> Finally, when creating your WMS layer with the SLD_BODY (and before you do mergeNewParams), you have to give the WMS layer a StyleMap with a "default" render intent, which you have to give the style object of your SLD.
>>
>> Regards,
>> Andreas.
>>
>> On Aug 5, 2010, at 17:45 , Sascha Müller wrote:
>>
>>
>>>
>>> Hi,
>>>
>>> I tried this SLD with only two instead of five rules. It works.
>>> Could it be, that the request 'GetLegendGraphic' is too long with the
>>> SLD inside?
>>> Like mergeNewParams() without 'Post' in 'OpenLayers.Layer.WMS'.
>>>
>>> Is there a way to implement it?
>>> Or is this more a GeoServer thing?
>>>
>>> Sascha
>>>
>>>
>>>
>>>> Hi,
>>>>
>>>> I use:
>>>>
>>>> GeoExt: trunk (Revision: 2257)
>>>> OpenLayers: 2.9
>>>> GeoExt: 3.2.1
>>>> GeoServer: 1.7.7
>>>>
>>>>
>>>> I use mergeNewParams() to change the Style of a layer. This approach
>>>> works except for one layer.
>>>> This layer contains five rules with filter. The map changes after
>>>> mergeNewParams(), the legend not.
>>>> The layername is still there, the images of the five rules are gone.
>>>>
>>>> If I use this SLD (see below) for the layer with the GeoServer from
>>>> start, the layer appears in map and legend. only after
>>>> mergenewParams() the layer appears not in the legend.
>>>>
>>>> The layer uses this: var addlayer = new OpenLayers.Layer.WMS.Post()
>>>>
>>>> SLD
>>>> ===
>>>> <?xml version="1.0" encoding="UTF-8"?>
>>>> <sld:StyledLayerDescriptor xmlns="http://www.opengis.net/sld"
>>>> xmlns:sld="http://www.opengis.net/sld"
>>>> xmlns:ogc="http://www.opengis.net/ogc"
>>>> xmlns:gml="http://www.opengis.net/gml" version="1.0.0">
>>>> <sld:NamedLayer>
>>>> <Name>WL:UBahn</Name>
>>>> <sld:UserStyle>
>>>> <sld:Name>Default Styler</sld:Name>
>>>> <sld:Title/>
>>>> <sld:FeatureTypeStyle>
>>>> <sld:Name>name</sld:Name>
>>>> <sld:FeatureTypeName>Feature</sld:FeatureTypeName>
>>>> <sld:SemanticTypeIdentifier>generic:geometry</sld:SemanticTypeIdentifier>
>>>> <sld:SemanticTypeIdentifier>colorbrewer:unique:oranges</sld:SemanticTypeIdentifier>
>>>> <sld:Rule>
>>>> <sld:MinScaleDenominator>0</sld:MinScaleDenominator>
>>>> <sld:MaxScaleDenominator>100000000</sld:MaxScaleDenominator>
>>>> <sld:Name>rule01</sld:Name>
>>>> <sld:Title>U1</sld:Title>
>>>> <Filter>
>>>> <PropertyIsEqualTo>
>>>> <PropertyName>LINIE</PropertyName>
>>>> <Literal>U1</Literal>
>>>> </PropertyIsEqualTo>
>>>> </Filter>
>>>> <sld:LineSymbolizer>
>>>> <sld:Stroke>
>>>> <sld:CssParameter name="stroke">
>>>> <Literal>#FEEDDE</Literal>
>>>> </sld:CssParameter>
>>>> <sld:CssParameter name="stroke-linecap">
>>>> <Literal>butt</Literal>
>>>> </sld:CssParameter>
>>>> <sld:CssParameter name="stroke-linejoin">
>>>> <Literal>miter</Literal>
>>>> </sld:CssParameter>
>>>> <sld:CssParameter name="stroke-opacity">1</sld:CssParameter>
>>>> <sld:CssParameter name="stroke-width">3</sld:CssParameter>
>>>> <sld:CssParameter name="stroke-dashoffset">
>>>> <Literal>0</Literal>
>>>> </sld:CssParameter>
>>>> </sld:Stroke>
>>>> </sld:LineSymbolizer>
>>>> </sld:Rule>
>>>>
>>>> <!-- The other RULSs looks the same like the one above -->
>>>>
>>>> </sld:FeatureTypeStyle>
>>>> </sld:UserStyle>
>>>> </sld:NamedLayer>
>>>> </sld:StyledLayerDescriptor>
>>>>
>>>> Is there something wrong with the SLD? Do I have something to consider
>>>> if I use mergeNewParams(), or something with the Legend?
>>>>
>>>> Thanks
>>>>
>>>> Sascha
>>>>
>>>>
>>>> _______________________________________________
>>>> Users mailing list
>>>> Users at openlayers.org
>>>> http://openlayers.org/mailman/listinfo/users
>>>>
>>>>
>>>>
>>>>
>>>
>>> _______________________________________________
>>> Users mailing list
>>> Users at openlayers.org
>>> http://openlayers.org/mailman/listinfo/users
>>>
>>
>>
>>
>
>
> _______________________________________________
> Users mailing list
> Users at openlayers.org
> http://openlayers.org/mailman/listinfo/users
--
Andreas Hocevar
OpenGeo - http://opengeo.org/
Expert service straight from the developers.
More information about the Users
mailing list