ThinkGeo.com    |     Documentation    |     Premium Support

Point label problems

Hi,


I did see this thread: gis.thinkgeo.com/Support/DiscussionForums/tabid/143/aff/12/aft/8851/afv/topic/Default.aspx#28426


I chose to make a new, however, since my problem may be another.


I'm trying to generate labels for a large number of points, but very few are displayed. According to the thread above I set the "Overlapping" and "GridSize" properties, but it didn't help.



Dim txtsty = New TextStyle(colnam, New GeoFont("Tahoma", 8), New GeoSolidBrush(GeoColor.SimpleColors.Black))
With txtsty
.OverlappingRule = LabelOverlappingRule.AllowOverlapping
.GridSize = 1 'meters
End With
lvl.CustomStyles.Add(txtsty)
 

What can I do to make all points as shown in the below image generate labels ? The zoom is 200m-by-200m.


 



TIA


 



Hi,


It occurred to me that the (very) few displayed labels probably were a little difficult to spot, sorta like an execise of Where's Wally.


So here's the same image with the Wally's I could find in circles.




Lars,


  I think that in your case, using the properties HaloPen or Mask would add to the visibility and esthetics of your labeling. Those properties hang from the TextStyle. It is going to make your map more readable. You can choose one or the other. See the code below for som examples:


 



textStyle.HaloPen = new GeoPen(GeoColor.StandardColors.LightPink, 3);

textStyle.Mask = new AreaStyle(new GeoSolidBrush(GeoColor.StandardColors.LightPink));
textStyle.MaskMargin = 2;


Hi Val,


I tried adding Halo et.al. as suggested, but it didn't produce more labels, so my question remains unanswered.


There ought to be about a hundred labels shown below, but I count less than 10. Where are the rest ?



 



Lars,


 I think that to get to the bottom of this, we are going to need to work with your point based shapefile. Can you attach it? If you are uncomfortable with doing this in the forum, you can send it to forumsupport@thinkgeo.com. And what column are you using to label? Thank you.


 



Hi Val,


It's alright, the data's not secret. They are, however, read from MS/SQL 2008, but I've converted them to a shape file, which I've attached as ZIP.


Labeling uses the text column "Element".


This is the kind of labeling density I'm hoping for (as shown in MapInfo Pro) - at least to begin with 


 




points_to_label_shapefile.zip (8.72 KB)

Lars,


 I think I found the problem. You need to set the property DuplicateRule to LabelDuplicateRule.UnlimietedDuplicateLabels. By default, it is set to NoDuplicateLabels (I believe). Also, I don't think that you are gain much by setting the GridSize so low. (The grid size is based on screen coordinate, not world coordinate).  I have it to 100 and it works fine. See my code below and the screen shot with your point layer labeled.


 



Map1.MapUnit = GeographyUnit.Meter;
           
ShapeFileFeatureLayer pointLayer = new ShapeFileFeatureLayer(@"C:\ThinkGeo\Support\Posts\10195\points_to_label_point.shp", ShapeFileReadWriteMode.ReadOnly);
pointLayer.ZoomLevelSet.ZoomLevel01.CustomStyles.Clear();
pointLayer.ZoomLevelSet.ZoomLevel01.DefaultPointStyle = PointStyles.CreateSimpleCircleStyle(GeoColor.StandardColors.Green, 12, GeoColor.StandardColors.Black);

TextStyle textStyle = new TextStyle("ELEMENT", new GeoFont("Arial", 10), new GeoSolidBrush(GeoColor.StandardColors.Black));
textStyle.HaloPen = new GeoPen(GeoColor.StandardColors.White, 2);
textStyle.PointPlacement = PointPlacement.UpperRight;
textStyle.GridSize = 100;
textStyle.DuplicateRule = LabelDuplicateRule.UnlimitedDuplicateLabels;
pointLayer.ZoomLevelSet.ZoomLevel01.DefaultTextStyle = textStyle;

pointLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;

LayerOverlay layerOverlay = new LayerOverlay();
layerOverlay.TileType = TileType.SingleTile;

layerOverlay.Layers.Add(pointLayer);
           
Map1.Overlays.Add(layerOverlay);

pointLayer.Open();
Map1.CurrentExtent = pointLayer.GetBoundingBox();
pointLayer.Close();