[OpenLayers-Dev] Bug in using graphicZIndex ?

Andreas Hocevar ahocevar at opengeo.org
Sun Apr 19 05:01:27 EDT 2009


Hi Vivien,

thanks for pointing out this lack of documentation. I have changed the 
ordering.html example 
(http://www.openlayers.org/dev/examples/ordering.html) to also show the 
case where zIndexing is set to true, explaining exactly what you were 
unable to find in the docs and examples.

If it is still unclear, please let us know.

Regards,
Andreas.

Vivien Deparday wrote:
> 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
>>
>>
>>
>>
>>     
>
> _______________________________________________
> Dev mailing list
> Dev at openlayers.org
> http://openlayers.org/mailman/listinfo/dev
>   


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




More information about the Dev mailing list