ThinkGeo.com    |     Documentation    |     Premium Support

MapEngine.Draw()

Hello,


I'm simply wondering if when using the MapEngine.Draw(layer) function,  labels are accounted for on other layers in the same engine, as they are with MapEngine.DrawStaticLayers, etc. Specifically, I'm wondering if labels will overlap, even if the TextStyles are set to not allow overlapping. I hope that's clear enough, it's sort of a convoluted question... Thanks for the help!


-Dustin



Dustin, 
  
 Thanks for your questions! 
  
 Before answer your questions I need to confirm with your question, did you mean that you want to implement the labels are not allow overlapping for several layers? If that, first I need to tell you the overlapping property is just for the labels of one layer, so the overlapping property just affects to all labels on one layer, if you have many layers with labels, we cannot ensure all labels on all layers are not overlapped. The overlapping property is just for one layer’s labels. 
  
 So to be implemented your requirements, I suggest you to do: 
  
 1, When initializing the layers, please void the overlap issue as possible. 
 2, Set the property of text style for each layer according to different zoomlevels. 
  
 I think the methods can help you to avoid the overlap issues for all labels on all layers as possible, 
  
 Any more questions please let me know, 
  
 Thanks, 
  
 Scott,

Hi Scott,


Thank you for the quick response! I now understand that the overlap property is just for one layer. However, I am confused about one thing. In the DrawCore method of a layer, there is a parameter for 'AllLabelingCandidates' (I can't remember the actual name of the parameter, but it's something to that effect) that is supposed to ensure the 'best placement' of labels on multiple layers, to minimize them running together or overlapping. I guess I'm just wondering that if the layers are drawn seperatley, does this collection remain intact between layers, or is it cleared out before each layer is drawn? Thanks again!


-Dustin



Dustin, 
  
 The AllLabelingCandiates represent all labels in all layers, this collection remain intact between layers when drawing, actually, you can judge the relationships such as overlap for this collection. Also I didn’t suggest you to do that, the correct logic is that the overlap property is set for each layer’s text style, so it just affects to one layer. Please avoid this situation and adjust all labels to display according to different zoomlevels. If you want to implement it by overriding the DrawCore method, the logic is complex should cost many times to code and test the results. 
  
 Any more questions please let me know, 
  
 Thanks, 
  
 Scott,

Scott 
 Thanks for the response! That’s pretty much was I was expecting you to say, I just wanted to be sure.  
 -Dustin

Dustin, 
  
 Any more questions don’t be hesitate to tell us. 
  
 Regards, 
  
 Gary