[OpenLayers-Dev] Bug in rendering features with cluster strategy

Tim Schaub tschaub at opengeo.org
Sat Nov 15 16:41:34 EST 2008


Hey-

Ivan Grcic wrote:
> OK Tim, I added new comment on http://trac.openlayers.org/ticket/1806#comment:17
> 

Thanks for the additional detail.

This is again a problem of making bad assumptions about what !!feature 
means.  Since after feature.destroy() the feature is still truthy, 
things fail that are based on this assumption.

The cluster strategy example exposes this type of problem in the feature 
handler.

I've included a new patch for #1806.

Tim

> 
> Regards,
> Ivan
> On Thu, Nov 13, 2008 at 8:42 PM, Tim Schaub <tschaub at opengeo.org> wrote:
>> Hey-
>>
>> Ivan Grcic wrote:
>>> Sorry guys patch doesnt work! Im sticking with my own dirty hack
>>> inside Layer.Vector drawFeature method...
>> Please provide more detail.  Preferably on the ticket in question.  It
>> is tough to provide solutions when the problems are this vague.
>>
>> Thanks,
>> Tim
>>
>>> On Fri, Nov 7, 2008 at 11:56 PM, Ivan Grcic <ivan.grcic at geofoto.hr> wrote:
>>>> Hey Alex...well actually i didnt catch time to try the patch...but
>>>> before patch was made i created dirty hack that was working for me.
>>>> Its not the best solution, but hey it works :)
>>>>
>>>> inside drawFeature just add one if statement
>>>>  function(feature, style) {
>>>>   if (OpenLayers.Util.indexOf(this.features, feature) != -1){
>>>>   ...
>>>>   ...
>>>> }
>>>> }
>>>>
>>>> (but for sure I will try the patch supplied in 1806 as soon as i can)
>>>>
>>>> On Fri, Nov 7, 2008 at 8:15 PM, Alexandre Dube <adube at mapgears.com> wrote:
>>>>> Answer to my second question...  still looking for the first...
>>>>>
>>>>>  >> If not, I would like to disable the wheel zoom. How can I do that ?
>>>>> oNavCtrl = new OpenLayers.Control.Navigation(
>>>>>    { 'zoomWheelEnabled': false});
>>>>>
>>>>> Alexandre Dube wrote:
>>>>>> I tried this small patch but unfortunately the problem persist. Is there
>>>>>> a new patch for this issue ( feature stays on screen when zooming with
>>>>>> mouse over it with cluster strategy ) ?
>>>>>>
>>>>>> If not, I would like to disable the wheel zoom. How can I do that ?
>>>>>>
>>>>>> Alexandre
>>>>>>
>>>>>> Tim Schaub wrote:
>>>>>>
>>>>>>> Hey-
>>>>>>>
>>>>>>> Eric Lemoine wrote:
>>>>>>>
>>>>>>>
>>>>>>>> Yes. Especially since drawFeature is often called from addFeatures,
>>>>>>>> where we're assured that the feature is in the layer. So, instead, we
>>>>>>>> may want to change the select feature control so that it calls
>>>>>>>> drawFeature only if, in the case of selection, the feature is in the
>>>>>>>> "features" array, and in the case of unselection, the feature is in
>>>>>>>> the "selectedFeatures" array. What do you think? Eric
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>> The problem is in the Feature handler.  We destroy features, but
>>>>>>> references to them are still truthy.  Since the destroy code sets the
>>>>>>> layer property to null, one check of an undestroyed feature is to check
>>>>>>> feature.layer.
>>>>>>>
>>>>>>> See http://trac.openlayers.org/attachment/ticket/1806/destroyed.patch
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>> 2008/11/4, Tim Schaub <tschaub at opengeo.org>:
>>>>>>>>
>>>>>>>>
>>>>>>>>> Hey-
>>>>>>>>>
>>>>>>>>> Ivan Grcic wrote:
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>> OK... i found it..inside Layer.Vector...now the question is: should i
>>>>>>>>>> put something like this:
>>>>>>>>>>
>>>>>>>>>> if (OpenLayers.Util.indexOf(this.features, feature) != -1){
>>>>>>>>>>
>>>>>>>>>> inside drawFeature: function(feature, style) {
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>> Nope.  Making drawFeature that safe at the expense of iterating through
>>>>>>>>> every feature with every draw is a mistake.
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>> or inside every other function inside Layer.Vector that uses
>>>>>>>>>> drawFeature function?
>>>>>>>>>>
>>>>>>>>>> When I put it here:
>>>>>>>>>>
>>>>>>>>>>     drawFeature: function(feature, style) {
>>>>>>>>>> -->       if (OpenLayers.Util.indexOf(this.features, feature) != -1){
>>>>>>>>>> ..
>>>>>>>>>> ..
>>>>>>>>>>      }
>>>>>>>>>> }
>>>>>>>>>>
>>>>>>>>>> it works pretty fine for me :) Eric?
>>>>>>>>>>
>>>>>>>>>> On Mon, Nov 3, 2008 at 9:53 AM, Ivan Grcic <ivan.grcic at geofoto.hr> wrote:
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>> Yup, its not Cluster Strategy...
>>>>>>>>>>> http://trac.openlayers.org/ticket/1806#comment:2
>>>>>>>>>>>
>>>>>>>>>>> On Mon, Nov 3, 2008 at 9:11 AM, Eric Lemoine <eric.c2c at gmail.com> wrote:
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>> Hi.
>>>>>>>>>>>>
>>>>>>>>>>>> Yes, this looks like a bug in OpenLayers.
>>>>>>>>>>>>
>>>>>>>>>>>> I'm under the impression that this isn't a bug in the cluster strategy
>>>>>>>>>>>> but either in Layer.Vector or in Control.SelectFeature. Indeed, I
>>>>>>>>>>>> think SelectFeature calls layer.drawFeature on feature
>>>>>>>>>>>> selection/unselection without checking whether the feature is in the
>>>>>>>>>>>> layer. And i'm saying this may be a bug in Layer.Vector because it may
>>>>>>>>>>>> be that drawFeature should be responsible for checking whether the
>>>>>>>>>>>> feature is in the layer before actually drawing it.
>>>>>>>>>>>>
>>>>>>>>>>>> This is just coming from the top of my head so i may be wrong, but i'm
>>>>>>>>>>>> feeling this is a good track to follow :)
>>>>>>>>>>>>
>>>>>>>>>>>> Eric
>>>>>>>>>>>>
>>>>>>>>>>>> 2008/11/2, Ivan Grcic <ivan.grcic at geofoto.hr>:
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>> Hi list,
>>>>>>>>>>>>>
>>>>>>>>>>>>> i discovered a bug while developing my OL application, in cluster
>>>>>>>>>>>>> strategy class.
>>>>>>>>>>>>>
>>>>>>>>>>>>> Bug occurs when you hover over one feature that represent a cluster
>>>>>>>>>>>>> (or externalGraphic or like in cluster example - vector circle
>>>>>>>>>>>>> http://openlayers.org/dev/examples/strategy-cluster.html)
>>>>>>>>>>>>>
>>>>>>>>>>>>> When you zoom in/out while that feature-cluster is selected (by
>>>>>>>>>>>>> quickly double-clicking or easier using scroll on ur mouse), on next
>>>>>>>>>>>>> zoom that cluster is rendered (stays on screen) together with newly
>>>>>>>>>>>>> created clusters! And clearly it shouldnt be there. The old
>>>>>>>>>>>>> ("phantom") cluster is not selectable, as he doesnt exist on the new
>>>>>>>>>>>>> zoom level..he just stays there on screen...annoying me :)
>>>>>>>>>>>>>
>>>>>>>>>>>>> As you zoom in again and again, phantom clusters always render, always
>>>>>>>>>>>>> at the same position in the map div...
>>>>>>>>>>>>>
>>>>>>>>>>>>> Please confirm that this is a bug, im going crazy here with this one :|
>>>>>>>>>>>>>
>>>>>>>>>>>>> --
>>>>>>>>>>>>> Ivan Grcic
>>>>>>>>>>>>> _______________________________________________
>>>>>>>>>>>>> Dev mailing list
>>>>>>>>>>>>> Dev at openlayers.org
>>>>>>>>>>>>> http://openlayers.org/mailman/listinfo/dev
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>> --
>>>>>>>>>>> Ivan Grcic
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>> --
>>>>>>>>> Tim Schaub
>>>>>>>>> OpenGeo - http://opengeo.org
>>>>>>>>> Expert service straight from the developers.
>>>>>>>>> _______________________________________________
>>>>>>>>> Dev mailing list
>>>>>>>>> Dev at openlayers.org
>>>>>>>>> http://openlayers.org/mailman/listinfo/dev
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>
>>>>> --
>>>>> Alexandre Dubé
>>>>> Mapgears
>>>>> www.mapgears.com
>>>>>
>>>>> _______________________________________________
>>>>> Dev mailing list
>>>>> Dev at openlayers.org
>>>>> http://openlayers.org/mailman/listinfo/dev
>>>>>
>>>>
>>>> --
>>>> Ivan Grcic
>>>>
>>>
>>>
>>
>> --
>> Tim Schaub
>> OpenGeo - http://opengeo.org
>> Expert service straight from the developers.
>> _______________________________________________
>> Dev mailing list
>> Dev at openlayers.org
>> http://openlayers.org/mailman/listinfo/dev
>>
> 
> 
> 


-- 
Tim Schaub
OpenGeo - http://opengeo.org
Expert service straight from the developers.



More information about the Dev mailing list