ThinkGeo.com    |     Documentation    |     Premium Support

Problems with Labels

Hi,


I'm trying to display feature labels with Map Suite Desktop.


My map consist in a list of shape files. I have added fixed label by a featurelayer.


I've already used the solution below succesfully in one project of mine.


 


Protected Function AddTestoMap(ByVal AddNewLayer As StructLayer) As Boolean


        Dim bReturn As Boolean = False


        Dim OverlayAdd As LayerOverlay = ControlNameGroup(AddNewLayer.strNomeLayerOverlay)


        Dim bitmapLayer As New InMemoryFeatureLayer()


        bitmapLayer.Name = AddNewLayer.strNomeLayer


 


        bitmapLayer.ZoomLevelSet.ZoomLevel01.Scale = Me._MapThinkGeo.ZoomLevelSet.ZoomLevel01.Scale


        bitmapLayer.ZoomLevelSet.ZoomLevel02.Scale = Me._MapThinkGeo.ZoomLevelSet.ZoomLevel02.Scale


        bitmapLayer.ZoomLevelSet.ZoomLevel03.Scale = Me._MapThinkGeo.ZoomLevelSet.ZoomLevel03.Scale


        bitmapLayer.ZoomLevelSet.ZoomLevel04.Scale = Me._MapThinkGeo.ZoomLevelSet.ZoomLevel04.Scale


        bitmapLayer.ZoomLevelSet.ZoomLevel05.Scale = Me._MapThinkGeo.ZoomLevelSet.ZoomLevel05.Scale


        bitmapLayer.ZoomLevelSet.ZoomLevel06.Scale = Me._MapThinkGeo.ZoomLevelSet.ZoomLevel06.Scale


        bitmapLayer.ZoomLevelSet.ZoomLevel07.Scale = Me._MapThinkGeo.ZoomLevelSet.ZoomLevel07.Scale


        bitmapLayer.ZoomLevelSet.ZoomLevel08.Scale = Me._MapThinkGeo.ZoomLevelSet.ZoomLevel08.Scale


        bitmapLayer.ZoomLevelSet.ZoomLevel09.Scale = Me._MapThinkGeo.ZoomLevelSet.ZoomLevel09.Scale


        bitmapLayer.ZoomLevelSet.ZoomLevel10.Scale = Me._MapThinkGeo.ZoomLevelSet.ZoomLevel10.Scale


        bitmapLayer.ZoomLevelSet.ZoomLevel11.Scale = Me._MapThinkGeo.ZoomLevelSet.ZoomLevel11.Scale


        bitmapLayer.ZoomLevelSet.ZoomLevel12.Scale = Me._MapThinkGeo.ZoomLevelSet.ZoomLevel12.Scale


        bitmapLayer.ZoomLevelSet.ZoomLevel13.Scale = Me._MapThinkGeo.ZoomLevelSet.ZoomLevel13.Scale


        bitmapLayer.ZoomLevelSet.ZoomLevel14.Scale = Me._MapThinkGeo.ZoomLevelSet.ZoomLevel14.Scale


        bitmapLayer.ZoomLevelSet.ZoomLevel15.Scale = Me._MapThinkGeo.ZoomLevelSet.ZoomLevel15.Scale


        bitmapLayer.ZoomLevelSet.ZoomLevel16.Scale = Me._MapThinkGeo.ZoomLevelSet.ZoomLevel16.Scale


        bitmapLayer.ZoomLevelSet.ZoomLevel17.Scale = Me._MapThinkGeo.ZoomLevelSet.ZoomLevel17.Scale


        bitmapLayer.ZoomLevelSet.ZoomLevel18.Scale = Me._MapThinkGeo.ZoomLevelSet.ZoomLevel18.Scale


        bitmapLayer.ZoomLevelSet.ZoomLevel19.Scale = Me._MapThinkGeo.ZoomLevelSet.ZoomLevel19.Scale


        bitmapLayer.ZoomLevelSet.ZoomLevel20.Scale = Me._MapThinkGeo.ZoomLevelSet.ZoomLevel20.Scale


 


 


        bitmapLayer.Open()


        bitmapLayer.Columns.Add(New FeatureSourceColumn(AddNewLayer.strNomeLayer))


        bitmapLayer.Close()


 


        Dim ptPosition As New PointShape(AddNewLayer.dblX, AddNewLayer.dblY)


        Dim testFeature As Feature = New Feature(ptPosition)


        testFeature.ColumnValues.Add(AddNewLayer.strNomeLayer, AddNewLayer.strTestoWrite)


        bitmapLayer.InternalFeatures.Add(testFeature)


 


        Select Case AddNewLayer.enCodiceStile


            [...]


            Case MapStyle.TestoOrdineNP


                bitmapLayer.ZoomLevelSet.ZoomLevel15.DefaultTextStyle = TextStyles.CreateMaskTextStyle(AddNewLayer.strNomeLayer, "Arial", 9, DrawingFontStyles.Bold, GeoColor.StandardColors.Black, New GeoColor(255, 255, 255))


                bitmapLayer.ZoomLevelSet.ZoomLevel15.DefaultTextStyle.BestPlacement = False


                bitmapLayer.ZoomLevelSet.ZoomLevel15.DefaultTextStyle.OverlappingRule = LabelOverlappingRule.AllowOverlapping


                bitmapLayer.ZoomLevelSet.ZoomLevel15.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20


                bitmapLayer.ZoomLevelSet.ZoomLevel15.DefaultPointStyle = PointStyles.CreateSimpleCircleStyle(GeoColor.StandardColors.White, 6, GeoColor.SimpleColors.Black, 1)


                bitmapLayer.ZoomLevelSet.ZoomLevel15.DefaultTextStyle.PointPlacement = PointPlacement.CenterRight


                bitmapLayer.ZoomLevelSet.ZoomLevel15.DefaultTextStyle.XOffsetInPixel = 5


                bitmapLayer.ZoomLevelSet.ZoomLevel15.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20


                


                      Case Else


                bitmapLayer.ZoomLevelSet.ZoomLevel01.DefaultTextStyle = TextStyles.State1(AddNewLayer.strNomeLayer)


                bitmapLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20


        End Select


 


        Try


            '-- Aggiungo il layer al gruppo


            OverlayAdd.Lock.EnterWriteLock()


            OverlayAdd.Layers.Add(bitmapLayer.Name, bitmapLayer)


            If AddNewLayer.bAddTopList Then


                OverlayAdd.Layers.MoveToTop(OverlayAdd.Layers.Count - 1)


            End If


 


            bReturn = True


        Catch ex As Exception


 


        Finally


            OverlayAdd.Lock.ExitWriteLock()


        End Try


 


        Return bReturn


    End Function


Me._MapThinkGeo is the map component.


StructLayer is a temporary structure for store data.


 


Now I have to use the same solution in another project.


The only thing that has changed is the scale of shapes files.


Everything works well but I can't see text labels on my map. On the other project, the same code works well and I see everything correctly.


 


John



John,


Thanks for your post,


According to your description I think your problem is from the scale of zoomlevel, as you mentioned the only thing that has changed is the scale of shapes file, so it caused the text labels cannot be displayed correctly. Obviously, you set the incorrect scale for zoomlevels. For the scale of zoomlevels you have to set them as a rule: Each zoom level is half in scale of the previous one. Please check the attachment for understanding it fully, also you can refer the sample code to your own application for setting the scale of zoomlevels. Also because the limitation issue I didn't attach the austinstreets.shp file, please reference it before you run the sample.


Thanks,


Scott,



CustomZoomLevels.zip (29.7 KB)

 Ok,


I've changed my code: now I set every zoom level according with your rules.



[...]


MapThinkGeo.MapUnit = GeographyUnit.Feet


MapThinkGeo.BackgroundOverlay.BackgroundBrush = New GeoSolidBrush(GeoColor.GeographicColors.DeepOcean)


GetCustomZoomLevelSet(MapThinkGeo.ZoomLevelSet, 50)


[...]



 Public Function GetCustomZoomLevelSet(ByRef zSet As ZoomLevelSet, ByVal initialScale As Double) As Boolean


        zSet.ZoomLevel01.Scale = initialScale


        zSet.ZoomLevel02.Scale = initialScale / 2


        zSet.ZoomLevel03.Scale = initialScale / 4


        zSet.ZoomLevel04.Scale = initialScale / 8


        zSet.ZoomLevel05.Scale = initialScale / 16


        zSet.ZoomLevel06.Scale = initialScale / 32


        zSet.ZoomLevel07.Scale = initialScale / 64


        zSet.ZoomLevel08.Scale = initialScale / 128


        zSet.ZoomLevel09.Scale = initialScale / 256


        zSet.ZoomLevel10.Scale = initialScale / 512


        zSet.ZoomLevel11.Scale = initialScale / 1024


        zSet.ZoomLevel12.Scale = initialScale / 2048


        zSet.ZoomLevel13.Scale = initialScale / 4096


        zSet.ZoomLevel14.Scale = initialScale / 8192


        zSet.ZoomLevel15.Scale = initialScale / 16384


        zSet.ZoomLevel16.Scale = initialScale / 32768


        zSet.ZoomLevel17.Scale = initialScale / 65536


        zSet.ZoomLevel18.Scale = initialScale / 131072


        zSet.ZoomLevel19.Scale = initialScale / 262144


        zSet.ZoomLevel20.Scale = initialScale / 524288


        Return True


    End Function




Now labels appears but I still have problems.


I'm trying to hide and to apply different styles to my layers based on zoom levels.


When I create ShapeFileFeatureLayer or InMemoryFeatureLayer I set style in this manner:


[...]



Select Case enCodiceStile


            Case MapStyle.Lago


                AddLayer.ZoomLevelSet.ZoomLevel11.DefaultAreaStyle = AreaStyles.Water1


                AddLayer.ZoomLevelSet.ZoomLevel11.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20


[...]



I expect that this featurelayer/shapelayer is hidden until zoom level 10 and visible from level 11 to 20 with Water1 style. Instead zoomlevel is always visible.


 


Thanks




Jonathan, 
  
 Can you provide us a simple sample so that we can reproduce this problem correctly? Currently according to our tests, if I set the area style from zoomlevel11 to zoomlevel20, the shape file is hidden until zoom level 10 and visible from zoomlevel11 to 20. So I have a question to ask you, did you set the minimum scale and maximum scale values? If you set, what are the values? If it is possible please give us a simple sample to reproduce it and resolve your problem correctly. 
  
 Thanks, 
  
 Scott,

I’ve to build the sample you required. 
  
 Meanwhile can you tell me why we have ZoomLevelSet property inThinkGeo.MapSuite.DesktopEdition.WinformsMap and also in ThinkGeo.MapSuite.Core.FeatureLayer? 
 I’ve set Scale property on WinformsMap.ZoomLevelSet. 
 Do I have to set Scale on every FeatureLayer.ZoomLevelSet? 
  
 Thanks

I forgot to answer your question. 
 I’ve set minimum and maximum scale in this manner: 
  
 MapThinkGeo.MinimumScale = MapThinkGeo.ZoomLevelSet.ZoomLevel20.Scale 
 MapThinkGeo.MaximumScale = MapThinkGeo.ZoomLevelSet.ZoomLevel01.Scale 
          
 John

Jonathan,


Thanks for your post and questions.
 
I do not think you need to set scale for each feature layer as it will use the customized zoomlevel set when you set it to the map control that will also indicate why we need to set the property of ZoomLevelSet.
 
Any more questions or concerns please feel free to let me know.
 
Thanks.
 
Yale