ThinkGeo.com    |     Documentation    |     Premium Support

Label Overlap Issue

Hello,


I am showing vehicle trip on the map. On each and every vehicle position, I am showing labels contains VehicleCode with position time and speed. The problem is when I do full level zoom its looks perfact but when I do low level zoom, labels become overlap and not looking good. Please find the following image for your reference. 


 



 


For display label on the map, I have done following code:


--------------------------------CODE--------------------------------------------


 InMemoryFeatureLayer markerLabelsOverlay = new InMemoryFeatureLayer();

        markerLabelsOverlay.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;

        markerLabelsOverlay.ZoomLevelSet.ZoomLevel01.DefaultTextStyle = TextStyles.CreateSimpleTextStyle("Name", "Verdana", 10, DrawingFontStyles.Bold, GeoColor.StandardColors.Black, -58, 15);

DrawingFontStyles.Bold,

        markerLabelsOverlay.ZoomLevelSet.ZoomLevel01.DefaultTextStyle.OverlappingRule = LabelOverlappingRule.NoOverlapping;

        markerLabelsOverlay.ZoomLevelSet.ZoomLevel01.DefaultTextStyle.FittingLineInScreen = true;

        markerLabelsOverlay.ZoomLevelSet.ZoomLevel01.DefaultTextStyle.FittingPolygon = true;

        markerLabelsOverlay.ZoomLevelSet.ZoomLevel01.DefaultTextStyle.SplineType = SplineType.StandardSplining;

        markerLabelsOverlay.ZoomLevelSet.ZoomLevel01.DefaultTextStyle.SuppressPartialLabels = true;

        markerLabelsOverlay.ZoomLevelSet.ZoomLevel01.DefaultTextStyle.GridSize = 10;

        markerLabelsOverlay.ZoomLevelSet.ZoomLevel01.DefaultTextStyle.BestPlacement = true;

        markerLabelsOverlay.ZoomLevelSet.ZoomLevel01.DefaultTextStyle.DrawingLevel = DrawingLevel.LevelOne;

        

        markerLabelsOverlay.FeatureSource.CustomColumnFetch += new EventHandler<customcolumnfetcheventargs>(MarkerLabels_CustomColumnFetch);

        markerLabelsOverlay.ZoomLevelSet.ZoomLevel01.DefaultTextStyle.RequiredColumnNames.Add("Name");

        

        this.DynamicOverlay.Layers.Add("Vehicle Marker Labels", markerLabelsOverlay);</customcolumnfetcheventargs>


 


------------------------------------------------------------------------------------------



 


What should I do, when labels that overlap? Please give solution for that. If possible, give sample code for more understanding.


Thanks,


Badal Patel



 


Badal,
It seems that there is no problem for the code posted. We also create a small demo using your code, but all works fine. Please have a look at the attached sample and check there is something different with yours.
I checked your online sample.it seems that not all label layers lay on the line shape layers. Maybe you need to reorder them.
Thanks,
Johnny

DisplayASimpleMap.aspx.cs.zip (1.15 KB)

 


Badal,
Maybe I know why this happened. In your application, one label shape file uses one LayerOverlay instead of all label layers sharing one LayerOverlay, right? That’s the problem if it is. The overlay is unable to check whether there are other labels in other Overlays around it, so it’s also unable to filter them. Maybe you need to try adding all the label layers in one LayerOverlay, is it possible for your scenario? I just guessed. Can you give a brief description about how you created all the layers in the application?
Thanks,
Johnny

Hi Johnny,


I made a user control for map. Please find attached file named Map.ascx.cs.zip for map control code. In this control, I am displaying points, areas, marker, marker label, etc.. When map is loaded, at that time first I am creating PointOverlay, AreaOverlay, MarkerOVerlay, MarkerLabelOverlay by calling CreatePointsOverlay, CreateAreaOverlay,CreateMarkerOverlay, CreateMarkerLabelOverlay methods respectively. In our issue, I am using MarkerOverlay and MarkerLabelOverlay. Please find attached file named VehicleTripHistory.aspx.cs, how I am display marker and its labels on the map. In this file see method fillVehicleHistory().


Now you tell me, what should I do to resolve this problem. If possible, send me modified code so I can understand easily.


Thanks,


Badal Patel


 



VehicleTripHistory.aspx.cs (24.7 KB)
Map.ascx.cs.zip (12.6 KB)

 Hey Johnny,


I have modified the source given by YOU and see whats happened.



 


You have used the for loop to generate random markers, so i have removed the for loop and just put three Markers there and you can see markers are not well aligned..


I have attached the sample code also here


 



testMarker.aspx.cs (3.26 KB)

It will be nice if someone throws any light on this issue? 
 Is this a bug in thinkgeo? If so then i can inform the client and take the necessary exemption here 
  
 Thanks

I dont know why anyone is not attending this issue? 
 I have replicate the issue in code given by you only but still noone here seems to tell whether its bug in map or in code? 
  


 


Badal,
Sorry for the delay.
I’m unable to download the “testMarker.aspx.cs” sample, but still thanks for abstracting the problem to so a simple demo, which makes me know what you are facing. The wired label for “BLU 2” is caused by “BestPlacement” property. If you set it to true, the MapSuite will check whether there is any other blank position around it to display other labels, maybe the position of label isn’t on your expected place. Here is the screenshot after comment “BestPlacement” line.

Thanks,
Johnny

Badal, 
  
   We are going to look into why the Best Placement is offsetting the labels so far.  I think the labels should not move that far.  I suggest you comment it out as suggest above and let us look into the issue. 
  
 David

Badal, 
  
 Just let you know that we have get this problem fixed, please get and have a try on the latest version (4.0.92.0 or later versions). 
  
 Any more questions just feel free to let me know. 
  
 Thanks. 
  
 Yale 


Hello Yale and David,


Problem has been fixed by commenting on BestPlace statement. 


Thanks.


Badal



Badal, 
  
   We are working to fix the Best Placement tight now.  We hope to have a fix very soon then you could turn that back on. 
  
 David