[OpenLayers-Users] Highlighting changes in the KML layer

Roald de Wit roald.dewit at lisasoft.com
Wed Nov 4 16:22:44 EST 2009


Hi Adrian,

When you refresh a layer (someone please correct me if I'm wrong here), 
all your features (items) will be replaced with the new ones, therefore 
you need to 'manually' keep track of your features. As you suggested, 
you could, just before a refresh, store all features (or feature.ids) in 
some array, then refresh and compare the new feature list with the old one.

The refresh is usually not synchronous, but that does not need to be a 
problem: you can register for events ('beforefeaturesadded' for example) 
and call your compare function with the list of new features. You can 
then loop through them and mark the new ones as new (for example by 
saying: feature.attributes.isNew = true). Make sure that the compare 
function itself returns true.

Have a look at what's possible with styling in OpenLayes (it's a bit of 
a read): http://docs.openlayers.org/library/feature_styling.html

So, yes, your plan sounds good!

Regards, Roald


Adrian Popa wrote:
> Hello Roald,
>
> I have a question about marking items as new - I guess they are not 
> marked out of the box, right?
> When I do the layer refresh, I just do layer.refresh({force: true}); I'm 
> not sure what this does internally, but perhaps I can't count on any 
> attributes I set - to be preserved.
>
> Should I build the variable (hash) where I keep attributes as a 
> different variable? Or should I keep it in a standalone object?
>
> Also, before I do the refresh - I suspect I need to copy the attributes 
> of the current objects, issue a layer refresh and then (hoping the 
> refresh is synchroneous) I should go through the new list and see if I 
> have new items. If there are, mark them as new (and mark other items as 
> 'old').
>
> Supposing that I do that - what would I need to do to change the aspect 
> (change color/make bigger) of the "new" items?
>
> I'm afraid this will consume some memory and resources - but I guess I 
> will see when it's ready...
>
> How does my plan sound like?
> Regards,
> Adrian
>
> Roald de Wit wrote:
>   
>> Hi Adrian,
>>
>> Adrian Popa wrote:
>>     
>>> Thank you for the hint. I suppose I shouldn't expect to see a working 
>>> demo of what I need :)
>>> Do you know if the patches presented in ticket 1259 are already part 
>>> of openlayers (since the latest version is from january last year?)
>>>       
>> The patches in that ticket are part of OpenLayers since version 2.6, 
>> so, yes!
>>
>> I'm not sure if you use styling coming from the KML file or style it 
>> all yourself. In your case I think you need to revert to the latter 
>> case. You will need to do some magic to find out what features are new 
>> and apply a different style to those items. There are few different 
>> ways of doing it. One of them might be marking it's 'newness' in an 
>> attribute of the new feature(s) and use a rule that checks that 
>> attribute in your style map.
>>
>> Regards,
>>
>> Roald
>>
>>     
>>> Thanks,
>>>
>>> helmi wrote:
>>>       
>>>> The idea from http://trac.openlayers.org/ticket/1259
>>>> {{{
>>>> You could create a selectStyle that could be passed to 
>>>> Control.SelectFeature quite easily: create a style object, read the 
>>>> "highlight" styles, create a FidFilter rule for every feature (or 
>>>> groups of features with the same style), use the according 
>>>> "highlight" style as symbolizer for the rule, and add the rule to 
>>>> the style object
>>>> }}}
>>>>
>>>> helmi03.com <http://helmi03.com>
>>>>
>>>> On Tue, Nov 3, 2009 at 12:59 AM, Adrian Popa 
>>>> <adrian_gh.popa at romtelecom.ro <mailto:adrian_gh.popa at romtelecom.ro>> 
>>>> wrote:
>>>>
>>>>     Hello everyone,
>>>>
>>>>     Sorry if this has already been discussed on the list (didn't really
>>>>     check), but I would like to know if there is a solution (or at
>>>>     least a
>>>>     plan to implement a feature) that �"somehow" highlights
>>>>     (visually) the
>>>>     elements that have been loaded �through KML - in contrast to the
>>>>     elements displayed previously.
>>>>
>>>>     I am working at a view that displays alarms on top of the map, 
>>>> and if
>>>>     there is a large number of alarms, one more alarm coming every 2
>>>>     minutes
>>>>     will not catch the attention of the operator...
>>>>
>>>>     I need a mechanism to somehow color/animate symbols loaded
>>>>     through KML
>>>>     which were not previously on the map. Symbols which dissapear 
>>>> between
>>>>     layer refreshes are not important to me. At the next refresh
>>>>     cycle, the
>>>>     highlighted symbols would no longer be highlighted (because they
>>>>     already
>>>>     exist on the map).
>>>>
>>>>     I have a way to load KMLs periodically, avoiding the cache, but I'm
>>>>     missing the "highlight" mechanism.
>>>>
>>>>     Hope I have presented my request in an understandable manner, and
>>>>     hope
>>>>     there is a solution. Maybe a property on the KML layer indicating
>>>>     if an
>>>>     item is new or not...
>>>>
>>>>     Regards,
>>>>     Adrian
>>>>
>>>>     _______________________________________________
>>>>     Users mailing list
>>>>     Users at openlayers.org <mailto:Users at openlayers.org>
>>>>     http://openlayers.org/mailman/listinfo/users
>>>>
>>>>
>>>>         
>>     
>
>
>   




More information about the Users mailing list