[OpenLayers-Users] mergeNewParams + Legend [SOLVED]

Sascha Müller olaiya at arcor.de
Mon Aug 9 05:07:53 EDT 2010



Hi,

The problem had something to do with the GeoServer. To be exact with the 
Jetty-Server.
The SLD seems to large for the HeaderBufferSize of the Jetty. With:

<Configure id="Server" class="org.mortbay.jetty.Server">
<Call name="addConnector">
<Arg>
<New class="org.mortbay.jetty.nio.SelectChannelConnector">
<Set name="port"><SystemProperty name="jetty.port" default="8080"/></Set>
<Set name='headerBufferSize'>8192</Set>
</New>
</Arg>
</Call>
</Configure> in the Jetty.xml

The default Value for the headerBufferSize is 4096.

you can increase the HeaderBufferSize.

After this, the Legend works as it should be.

regards,

Sascha

> Hi,
>
> I see you don't use SLD_BODY any more. So you don't need the whole workaround, and also don't need Layer.WMS.POST. This is good - using SLD instead of SLD_BODY is the preferred option.
>
> Regards,
> Andreas.
>
> On Aug 6, 2010, at 16:22 , Sascha Müller wrote:
>
>    
>>
>> Hi,
>>
>> Ok, I've got it a little bit.
>>
>> 1) I changed in VectorLegend.js
>> GeoExt.VectorLegend.supports = function(layerRecord) {
>> -    return layerRecord.get("layer") instanceof OpenLayers.Layer.Vector;
>> +   return layerRecord.get("layer").styleMap;
>> };
>>
>> 2) I add
>> "preferredTypes: ["gx_vectorlegend"]" to my LegendPanel.
>>
>> 3) I load a WMS-Layer with a SLD_Body:
>> var ub = new OpenLayers.Layer.WMS.Post("U-Bahn Test",
>>                  "http://localhost:8081/geoserver/wms/",
>>                  {
>>                      layers: "WL:UBahn",
>>                      transparent: true,
>>                      format: 'image/jpeg',
>>                      sld    :
>> "http://localhost:8081/geoserver/styles/myStyle.sld"
>>                  },
>>                  {
>>                      isBaseLayer: false
>>                  }
>>              );
>>              map.addLayer(ub);
>>
>> 4) But, how do I give the WMS layer a styleMap?
>>
>> var myStyles = new OpenLayers.StyleMap({
>>          "default": new OpenLayers.Style({
>>              fillColor: "#ffcc66",
>>              strokeColor: "#ff9933",
>>              strokeWidth: 2,
>>              graphicZIndex: 1
>>          })
>>      });
>>
>> ???
>>
>> 4) Do mergeNewParams()
>>
>>
>>
>> Maybe this is an own thread:
>> After this works, is there a way, to get the properties out of the sld
>> and wrire it in the styleMap? similiar to this thread
>> http://osgeo-org.1803224.n2.nabble.com/StyleMap-and-dynamic-loaded-styles-td4961340.html#a4961340
>> The difference is, I got a XML (SLD) back. If not, I have to parse the
>> whole SLd and get all the properties and mut them into the styleMap.
>>
>>
>> regards,
>>
>> Sascha
>>
>>
>>      
>>> 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
>>>>
>>>>          
>>>        
>>
>> _______________________________________________
>> Users mailing list
>> Users at openlayers.org
>> http://openlayers.org/mailman/listinfo/users
>>      
>    





More information about the Users mailing list