Thanks for the example Slawomir. You are right, currently the NG renderers 
(which SVG2 is a subclass of) don't recalculate styles on zoom change. I 
created a ticket (http://trac.osgeo.org/openlayers/ticket/3257). If fixed 
wisely, the performance impact of recalculating the styles on zoom level 
changes will be minimal.

Andreas.

On Apr 13, 2011, at 09:55 , Slawomir Messner wrote:

> Sure,
> last time I wanted to post code here it was too long so I don't try to send 
> our style map and shorten it this time.
> Our projection is 900913. The "mapObject" is our map-controller so you should 
> replace it by your way to find the map.
> 
> var defaultStyle = new OpenLayers.Style({
>            'pointRadius': '1',
>            'fillColor': '#008700',
>            'fillOpacity': '0.6',
>            'stroke': 'True',
>            'strokeColor': '#21007E',
>            'strokeOpacity': '0.9',
>            'strokeWidth': '1',
>            'strokeDashstyle': 'solid',
>            'label': '${labelText}',
>            'fontSize': '${getLabelFontSize}',
>            'labelXOffset': '3',
>            'labelYOffset': '3',
>            'fontFamily': 'Arial',
>            'labelAlign': 'lb',
>            'display': ''
>        });
> 
>        defaultREDEStyle = new OpenLayers.Style({
>            'pointRadius': '1',
>            'fillColor': '#008700',
>            'fillOpacity': '0.6',
>            'stroke': 'True',
>            'strokeColor': '#21007E',
>            'strokeOpacity': '0.9',
>            'strokeWidth': '1',
>            'strokeDashstyle': 'solid',
>            'label': '',
>            'fontSize': '6px',
>            'labelXOffset': '3',
>            'labelYOffset': '3',
>            'fontFamily': 'Arial',
>            'labelAlign': 'lb',
>            'display': ''
>        });
> var defaultStyleMap = new OpenLayers.StyleMap({ 'default': defaultStyle, 
> 'redeDefault':defaultREDEStyle });
> 
> defaultStyleMap.styles["default"].context =
> {    getLabelFontSize: function (feature) {
>        var fontSize = (feature.attributes.style != null && 
> feature.attributes.style.fontSize != null && 
> feature.attributes.style.fontSize)
>            || (feature.layer && 
> feature.layer.styleMap.styles["redeDefault"].defaultStyle.fontSize);
> 
>        return Math.min(25, Math.max(5, parseInt(fontSize) * 6000 / 
> feature.layer.map.getResolution())) + "px";
>    },
>    labelText:function(feature){
> if(feature.attributes.style != null && feature.attributes.style.label != 
> null) {
>            return feature.attributes.style.label.length > 0 ? 
> feature.attributes.style.label : '';
>        } else if(feature.layer) {
>            return 
> feature.layer.styleMap.styles["redeDefault"].defaultStyle.label;
>        } else {
>            return '';
>        }}
> 
> }
> 
> var layer = new OpenLayers.Layer.Vector("test", 
> {styleMap:defaultStyleMap,renderers : ["SVG"]});
> layer.addFeatures(new OpenLayers.Feature.Vector(new 
> OpenLayers.Geometry.Point(893208.5127734,6940239.5448242),{style:{label:"test1",fontSize:"20px"
> }}));
> layer.addFeatures(new OpenLayers.Feature.Vector(new 
> OpenLayers.Geometry.Point(1143208.5127734,6910239.5448242),{style:{label:"test1"}}));
> layer.addFeatures(new OpenLayers.Feature.Vector(new 
> OpenLayers.Geometry.Point(1403208.5127734,6910239.5448242),{style:{label:"test1"}}));
> layer.addFeatures(new OpenLayers.Feature.Vector(new 
> OpenLayers.Geometry.Point(1108208.5127734,6605239.5448242),{style:{label:"test1"}}));
> mapObject.map.addLayer(layer);
> var layer2 = new OpenLayers.Layer.Vector("test2", 
> {styleMap:defaultStyleMap,renderers : ["SVG2"]});
> layer2.addFeatures(new OpenLayers.Feature.Vector(new 
> OpenLayers.Geometry.Point(893208.5127734,6940239.5448242),{style:{label:"test1",fontSize:"20px"
> }}));
> layer2.addFeatures(new OpenLayers.Feature.Vector(new 
> OpenLayers.Geometry.Point(1143208.5127734,6910239.5448242),{style:{label:"test1"}}));
> layer2.addFeatures(new OpenLayers.Feature.Vector(new 
> OpenLayers.Geometry.Point(1403208.5127734,6910239.5448242),{style:{label:"test1"}}));
> layer2.addFeatures(new OpenLayers.Feature.Vector(new 
> OpenLayers.Geometry.Point(1108208.5127734,6605239.5448242),{style:{label:"test1"}}));
> mapObject.map.addLayer(layer2);
> 
> Regards,
> Slawomir
> 
> Am 13.04.2011 09:25, schrieb Andreas Hocevar:
>> Hey Slawomir,
>> 
>> thanks for the feedback. Can you please provide a working example so we can 
>> reproduce and fix the issue?
>> 
>> Thanks,
>> Andreas.
>> 
>> On Apr 13, 2011, at 08:14 , Slawomir Messner wrote:
>> 
>>> Hi,
>>> would like to use it too but we use a style map with context so that labels 
>>> and graphics change size on zoom but the functions are not called with SVG2 
>>> when zoomed only with SVG so the things stay at initial size dependent on 
>>> the zoom level at loading. I hope this is not the reason for performance 
>>> boost. Is it normal that SVG2 doesn't call the functions of 
>>> context/symbolizers?
>>> Best regards,
>>> Slawomir
>>> 
>>> Am 12.04.2011 17:34, schrieb mortac8:
>>>> This is amazing.  I can draw 10,000 features in Opera and zoom in/out in
>>>> <500ms on the provided timer.
>>>> 
>>>> --
>>>> View this message in context: 
>>>> http://osgeo-org.1803224.n2.nabble.com/SVG2-and-2-11-tp6251101p6265597.html
>>>> Sent from the OpenLayers Dev mailing list archive at Nabble.com.
>>>> _______________________________________________
>>>> Dev mailing list
>>>> [email protected]
>>>> http://lists.osgeo.org/mailman/listinfo/openlayers-dev
>>>> 
>>> _______________________________________________
>>> Dev mailing list
>>> [email protected]
>>> http://lists.osgeo.org/mailman/listinfo/openlayers-dev
>> 
>> 
> 
> _______________________________________________
> Dev mailing list
> [email protected]
> http://lists.osgeo.org/mailman/listinfo/openlayers-dev



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

_______________________________________________
Dev mailing list
[email protected]
http://lists.osgeo.org/mailman/listinfo/openlayers-dev

Reply via email to