ThinkGeo.com    |     Documentation    |     Premium Support

Custom Marker Questions

Hello, I am implementing custom Markers and have a couple questions... first some background...


While doing some performance tests, we noticed that there was a great deal of overhead in creating new Marker objects, so we've decided to create custom FeatureSourceMarkerOverlay which would cache the Markers and only create a new marker when it has not been created before, otherwise we would use the cached Marker.  This dramatically improved performance, however we found 2 things with this approach.  First, Marker.ImageSource was always null after it was drawn the first time, and two, doing some performance tests, we found that there was also a large amount of overhead in resetting the ImageSource.  So we created a custom Marker object who had its ImageSource set to null, but whos Children contained an Image object... the source of this object persists over refreshes so we were able to gain even more performance increase (I think in total we dropped from ~4 second refresh time on 800 markers to just under 1 second using this approach.


I recently got a new requirement to display labels under the Marker... simple, just add a textblock under my image.  However, what I'm noticing (and totally makes sense) is that when the text is long, the image moves to the right of its actual location, so that the actual location of the marker is the upper left corner of the entire object.  What I desire is to have the actual location be the center of my icon.  I believe this is the behavior of something like a ShapeFileFeatureLayer and some other layers (probably even MarkerOverlay when you set the image source).


I guess my question is how do I go about achieving this?  Now that I've seen it with text, doing it the way I'm doing it, even if I just have an icon with no text, the center of the icon is not the location of the text, the upper left corner is.


Any insight would be appreciated.  Thank you for your time and help.


 


.Ryan.



Hi Ryan, 
  
  Have you considered to use an InMemoryFeatureLayer with CustomStyle PointShapes for the icons? It make some things little bit more complicated, but you will improve the performance x10… 
  
  Carlos.

Ryan, 
  
 I think you can have a try according to Carlos’s suggestion, actually, if you use the InMemoryFeatureLayer it really can increase the performance greatly, but I’m not sure it will improve the performance * 10. Also about the image location issue with textblock I think you can use the InMemoryFeatureLayer with text style to resolve the location issue. 
  
 Just take a try and to see what happened,  
  
 Thanks, 
  
 Scott,

There’s a lot of things that a Marker has by default, such as right-click for context menu and the ability to drag the markers to move, and so I’d like to stay with markers. 
  
 .Ryan.

Ryan, 
  
 For your two questions, I realize that your application is a little complex, I arranged your implements below: 
  
 1, Performance issue for creating markers.  
 2, Image location issue with long text. 
  
 If I don’t misunderstand them, can you make a simple sample to us so that we can do some researches on your sample application? You create your own custom FeatureSourceMarkerOverlay, we don’t know the whole work flow in your application and it is difficult to write the same sample to reproduce the problems.  So please arrange a simple sample to us so that we can work on it directly and help you on your requirements. 
  
 Thanks, 
  
 Scott,

Hi Scott, 
  
 While creating my sample I think I discovered my problem.  I have a setting determining if the label is on or off… it seems that when it is on and text is long, Marker width gets wider, however if text is then turned off, my text width is 0 but the marker maintained its width… so by setting the text visibility to hidden rather than collapsed, I don’t see my issue.  
  
 Thanks, 
 .Ryan.

Ryan, 
  
 That’s great! During you are developing the application if you find out any other problems or issues please let us know again, 
  
 Thanks, 
  
 Scott,