ThinkGeo.com    |     Documentation    |     Premium Support

Highlight shapefile polygon on mouse hover

Hi All,


What is the preferred way to highlight shapefile polygons on mouse hover? For example, say I have a world map showing the sample Countries02.shp file. I would like the various countries to highlight as I mouse over them. Next I need to display a popup with information about that country when the user pauses the mouse.


I have used the How Do I sample "Highlight a Feature on the Map" to highlight a specific feature based on data criteria. Would I adapt this code for use with a mouse? If so, what is the correct way to do the mouse handling?


Thank you for your help,


Thaine



Since no one has answered yet, hopefully I can clarify my question. 
  
 If I were doing this in straight XAML, I would set EventTriggers for MouseEnter and MouseLeave, and assign storyboards to handle my highlight animations. If I were doing this from the code-behind, then I would add event handlers for MouseEnter and MouseLeave for each polygon. 
  
 However, unless I don’t understand it properly (which is certainly the case), I don’t have access to the individual polygons in a ShapeFileFeatureLayer, so I cannot attach event handlers to them. 
  
 So, what is the way within WpfMap to highlight polygons in a shapefile? How can I have access to the underlying WPF MouseEnter and MouseLeave events? 
  
 Thanks, 
 Thaine

Thaine,


 I know exactely what you are talking about and acually we have a SilverLight sample under "Overlay" category, Hightlight a Feature While Hovering silverlightsamples.thinkgeo.com/default.aspx. I think that it should not be too difficult to convert that SilverLight sample to Wpf so I tasked a guy from the Development Team for building a little Wpf sample for that. I think that tomorrow, it should be ready. Thank you.



Awesome! Thank you Val!


I was able to copy the sample code directly from the Silverlight example and it works great.


It's a little slower than I had hoped while iterating through all the countries of the world. I wonder what kind of optimizations could be made. Would it be possible to detect which tile the mouse is over and limit the query to polygons that only intersect the current tile? It seems like that could be a simple and effective optimization. What do you think?


Thaine



Thaine,


 I'm glad you could get something working based on that SilverLight sample. I have a little Wpf sample for you that we adapted from the SilverLight sample. In that attached Wpf sample, we use the technique of just highlighting the feature after the mouse stops moving for 0.3 seconds to avoid performance penalty. You can adjust this span time if you want. About detecting over which tile the mouse is over to limit the query to the relevant features, let me investigate how feasible this is and I will let you know.


Thank you.



CSharp_Sample.zip (101 KB)

Thaine,


 I inquired with the Development team on how to improve the performance of highlighting features when hovering, and this is what I found out.


 For using features only in the relevent tile, I don't think this is going to buy us much. As we are using RTree to get the contained polygons so in fact limiting the polygons to query in a tile doesn't not help too much, as the total queried polygons will not be less finding the corresponding tile, get the polygons within it, generate an InMemory RTree (otherwise we have to loop through all the features inside it) and use RTree to get the correct polygon anyway. So I am afraid that it is not the way to go. An alternative way might be making some "client features" which are in fact separate controls (kind of markers) so when the mouse hovers a feature, it catches the event and highlights itself. We added this idea to our issue tracker for future enhancement. Thank you very much for your feedback and helping us make our products better.



Hello!


 This is to inform everybody that a sample project in relation to this post was added recently to the Code Community in ThinkGeo Wiki. The sample, Hightlight at Mouse Hover, can be found at the following link:


wiki.thinkgeo.com/wiki/Map_Suite_Wp...ouse_Hover