[OpenLayers-Dev] Bug in using graphicZIndex ?

Vivien Deparday vivien.deparday at gmail.com
Thu Apr 16 16:48:01 EDT 2009


So, I found out the answer. It is just that the text of the ordering 
example is misleading. It says: "All vector layers have z-indexing 
enabled by default, but are not enabled with y-ordering". However, the 
z-indexing is not enable by default, rendererOptions: {zIndexing: true} 
is needed to activate the z-indexing and this property is not documented 
anywhere but in one thread of the user list 
(http://n2.nabble.com/Set-Z-Index-of-a-Feature-td2226539.html).

So, I think either the zOrdering option should be enabled by default as 
it's written in the example or we should add a line in the example text?

Vivien



Vivien Deparday wrote:
> Hi all,
>
> I'm trying to set different graphicZIndex for my polygons, lines, and 
> points so that my points are on top of my lines which are on top of my 
> polygons. All the features are within the same vector layer (code 
> below). This layer has a stylemap with a context property to return 
> different values of the graphicZIndex property according to the 
> geometry type.
> When, I inspect the dom with firebug, I can see that each feature has 
> the right graphicZIndex. However, in the display, the z order is still 
> the same as the drawing order (some features with bigger graphicZIndex 
> are under some with a lower).
> If I set "rendererOptions: {yOrdering: true}", then it works.
> The same thing can be reproduced in the ordering example 
> (http://openlayers.org/dev/examples/ordering.html). If you comment  
> the yOrdering: true, the red features are not ordered according to 
> their z-index but only according the drawing order.
>
> However, if I correctly understand the documentation and with a quick 
> look at the code in /renderer/elements.js, the z ordering is supposed 
> to be activated by default ( to use the Z_ORDER_DRAWING_ORDER  
> comparing method) and the yOrdering property is supposed to be 
> necessary only for y ordering (to use the Z_ORDER_Y_ORDER  comparing 
> method).
> <http://dev.openlayers.org/docs/files/OpenLayers/Renderer/Elements-js.html#OpenLayers.ElementsIndexer.IndexingMethods.Z_ORDER_Y_ORDER> 
>
> Am I misunderstanding something in the way it should work? or is there 
> a bug? and yOrdering: true should not be necessary for zOrdering?
>
> Here is the stylemap and the layer creation code:
>          var styleMap = new OpenLayers.StyleMap({
>            'default': new OpenLayers.Style({
>                fillColor: '${fillColor}',
>                fillOpacity: 0.8,
>                 strokeColor: '${strokeColor}',
>                 strokeWidth: 2,
>                 strokeOpacity: 0.8,
>                pointRadius:'2',
>                externalGraphic: "${getChartURL}",
>                graphicZIndex: "${getZIndex}"
>                },
>             {
>                    fillColor: function(feature){
>                        return feature.cluster ? '#00c600' : '#fde500';
>                    },
>                    strokeColor: function(feature){
>                        return feature.cluster ? '#096d09' : '#e76e1b';
>                    },
>                    getChartURL: function(feature){
>                        return '';
>                    },
>                    getZIndex: function(feature){
>                        var zIndex=map.Z_INDEX_BASE['Overlay'];
>                                              
> if(feature.geometry.CLASS_NAME === "OpenLayers.Geometry.LineString")
>                        {
>                            var zIndex = map.Z_INDEX_BASE['Overlay']+1;
>                        }
>                        else if (feature.geometry.CLASS_NAME === 
> "OpenLayers.Geometry.Point")
>                        {
>                            var zIndex = map.Z_INDEX_BASE['Overlay']+2;
>                        }
>                        else if (feature.geometry.CLASS_NAME === 
> "OpenLayers.Geometry.Polygon")
>                        {
>                            var zIndex = map.Z_INDEX_BASE['Overlay'];
>                        }
>                                      return zIndex;
>                    }
>                 }
>             })
>        });
>      vectors = new OpenLayers.Layer.Vector("Assets", {
>            styleMap: styleMap,
>            strategies: [
>                    new OpenLayers.Strategy.Cluster({distance:40, 
> threshold:2, autoActivate:false, clusterOnActivate: true}),
>                    new OpenLayers.Strategy.Fixed()
>                ],
>                protocol: new OpenLayers.Protocol.HTTP({
>                    url: "http://localhost:8080/geoserver/wfs",
>                    params: {
>                        request: "GetFeature",
>                        typename: "mcviz:assets_json",
>                        outputformat: "json"
>                    } ,
>                    format: new OpenLayers.Format.GeoJSON({
>                        externalProjection: new 
> OpenLayers.Projection('EPSG:26909'),
>                        internalProjection: 
> map.getProjectionObject()                                 })
>                                  }),
>            eventListeners: {
>                'loadend': onLoadEnd
>            },
>             // Works with it, does not work without
>            rendererOptions: {yOrdering: true}
>        })
>
> Thanks,
>
> Vivien
>
>
>
>




More information about the Dev mailing list