ThinkGeo.com    |     Documentation    |     Premium Support

Labels not showing at zoom levels 17 - 20

 Hello,


We have defined custom text styles for labeling roads, as you can see below, however when you get to zoom level 17 the labels do not appear to change and by the time you get to zoom level 20 you cannot see the road name.  Any and all suggestions would be greatly appreciated.


 



'Line Text Styles


        Dim textStyle As TextStyle = TextStyles.Utility1(MyDataRow.Item("MapLLabelField"))


        textStyle.Font = New GeoFont("Arial", 4)


        textStyle.TextLineSegmentRatio = Double.MaxValue


        textStyle.DuplicateRule = LabelDuplicateRule.UnlimitedDuplicateLabels


        textStyle.SplineType = SplineType.Default


        textStyle.OverlappingRule = LabelOverlappingRule.NoOverlapping


        textStyle.SuppressPartialLabels = True


        textStyle.GridSize = 1


 


        Dim textStyle2 As TextStyle = TextStyles.CreateSimpleTextStyle(MyDataRow.Item("MapLLabelField"), "Arial", 7, DrawingFontStyles.Bold, GeoColor.StandardColors.Black)


        textStyle2.TextLineSegmentRatio = Double.MaxValue


        textStyle2.DuplicateRule = LabelDuplicateRule.UnlimitedDuplicateLabels


        textStyle2.SplineType = SplineType.StandardSplining


        textStyle2.BestPlacement = True


        textStyle2.GridSize = 1



.


.


.



myLayer.ZoomLevelSet.ZoomLevel01.DefaultTextStyle = textStyle


        myLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level16


        myLayer.ZoomLevelSet.ZoomLevel17.DefaultTextStyle = textStyle2


        myLayer.ZoomLevelSet.ZoomLevel17.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20


 


Thanks




Tim, 
  
 It should be working, so if you set two text styles to the same, does it work? 
  
 if you can provide your sample data we can easy to test and find the problem. 
  
 Thanks 
 James 


Hello, 
  
 Let me clarify my issue.  When using the text styles defined above and applying them to the roads the labels appear on the map for all of the zoom levels however when the zoom level is greater than or equal to 17 the labels do not seem to move from their original position and thus cannot be seen in certain areas of the map when you pan around.  I hope that better defines the situation we are facing. 
  
 Thanks

TIM, 
  
 Thanks for your post and questions. 
  
 I hope my understanding is on the right direction. Yes, as you already have noticed, the labeling position for a specified line shape will not change according to zoom levels; it will always be labeled at its center location. So, when you zoom into detailed zoom levels such as ZoomLevel17 or even ZoomLevel20, the label position is still the center of the whole lineshape, which probably exceed the current extent. 
 Hope that can explain what is happening in your case. 
  
 Any more questions please feel free to let me know. 
  
 Thanks. 
  
 Yale 


Tim, 
  
 I did some test by your code, I think another possible to cause the problem is that your data is not suitable for SplineType.StandardSplining, could you set SplineType of textStyle2 to Default or None and see if the labels can show on zoomlevel 17 to 20. 
  
 Thanks 
 James

James, 
  
 I tried out your suggestion and it did not make a difference in the way the labels were displayed.  I have a small project that will hopefully clarify the issues we are experiencing.  If you zoom down to level 20 you will notice that on certain roads you cannot see a label.  Please advise on how this can be corrected. 
  
  
  
  
Public Class Form1

    Private text1 As TextStyle
    Private text2 As TextStyle

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        text1 = TextStyles.Utility1("Street")
        text1.Font = New GeoFont("Arial", 4)
        text1.TextLineSegmentRatio = Double.MaxValue
        text1.DuplicateRule = LabelDuplicateRule.UnlimitedDuplicateLabels
        text1.SplineType = SplineType.Default
        text1.OverlappingRule = LabelOverlappingRule.NoOverlapping
        text1.SuppressPartialLabels = True
        text1.GridSize = 1

        text2 = TextStyles.CreateSimpleTextStyle("Street", "Arial", 7, DrawingFontStyles.Bold, GeoColor.StandardColors.Black)
        text2.TextLineSegmentRatio = 100
        text2.DuplicateRule = LabelDuplicateRule.UnlimitedDuplicateLabels
        text2.SplineType = SplineType.None
        text2.BestPlacement = False
        text2.GridSize = 1

        LoadMap()

    End Sub

    Private Sub LoadMap()
        map.MapUnit = GeographyUnit.DecimalDegree
        map.BackColor = Color.White

        Dim shapeOverlay As LayerOverlay = New LayerOverlay()

        Dim di As DirectoryInfo = New DirectoryInfo("…/…/Shape")
        For Each fi As FileInfo In di.GetFiles("*.shp")
            Dim myLayer As ShapeFileFeatureLayer = New ShapeFileFeatureLayer(fi.FullName)

            myLayer.ZoomLevelSet.ZoomLevel01.DefaultLineStyle = LineStyles.CreateSimpleLineStyle(GeoColor.StandardColors.Red, 2, True)
            myLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level16
            myLayer.ZoomLevelSet.ZoomLevel17.DefaultLineStyle = LineStyles.MajorRoad1()
            myLayer.ZoomLevelSet.ZoomLevel17.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20

            myLayer.ZoomLevelSet.ZoomLevel01.DefaultTextStyle = text1
            myLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level16
            myLayer.ZoomLevelSet.ZoomLevel17.DefaultTextStyle = text2
            myLayer.ZoomLevelSet.ZoomLevel17.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20

            myLayer.Open()
            map.CurrentExtent = myLayer.GetBoundingBox()
            myLayer.Close()

            shapeOverlay.Layers.Add(fi.Name, myLayer)
        Next

        map.Overlays.Add("ShapeOverlay", shapeOverlay)

        map.Refresh()
    End Sub

End Class
 
  
 Thanks

TIM,


Thanks for your post and feedback.
Can you have a try to use the same text style (style1 or style2) from ZoomLevel01 to ZoomLevel20 all the time like as following code snippet shows?   

 

myLayer.ZoomLevelSet.ZoomLevel01.DefaultTextStyle = text1
myLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20
 
Or
 
myLayer.ZoomLevelSet.ZoomLevel01.DefaultTextStyle = text2
myLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20

I am sorry to say that, I could not recreate your problem as the missing of the test files, if you want, could you send me some test data for it?



Any more questions please feel free to let me know.
Thanks.
Yale

 Hello,


I am trying to send the file(s) with the project and the shape files I used.  They should be included with this post.


Thanks



001_ZoomLevelTest.zip (498 KB)
ZoomLevelTest.zip (498 KB)

TIM,


Thanks for your post and sample code.
I tested against the sample code you provided and it works fine, following is the screenshot for ZoomLevel19, the labels display as expected.

As I addressed above, the label positions will not change when zooming in or zooming out, so it is possible for some roads the label “disappear” because its label position is outside of the current extent.
Any more questions please feel free to let me know.
Thanks.
Yale