ThinkGeo.com    |     Documentation    |     Premium Support

Display text on valuestyle collection

Very New Here


 


I have created a pointlayer  with a collection of valuestyles  called OILSStyles


 OILSStyle.ColumnName = "OIL"


 rdgicon = New PointStyle(New GeoImage(icopath & "ur_ly_c.ico"))

 rdgicon.PointType = PointType.Bitmap

 OILSStyle.ValueItems.Add(New ValueItem("ur_lyc", rdgicon))  ' Creates the new style.

 


  rdgicon = New PointStyle(New GeoImage(icopath & "ur_lg_c.ico"))

  rdgicon.PointType = PointType.Bitmap

  OILSStyle.ValueItems.Add(New ValueItem("ur_lgc", rdgicon))  ' Creates the new style.



        pointLayer.ZoomLevelSet.ZoomLevel01.CustomStyles.Add(OILSStyle)

        pointLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20

        pointLayer.Open()



        pointLayer.Columns.Add(New FeatureSourceColumn("OIL"))

        pointLayer.Columns.Add(New FeatureSourceColumn("BOXID"))

        pointLayer.Columns.Add(New FeatureSourceColumn("Lat"))

        pointLayer.Columns.Add(New FeatureSourceColumn("Lon"))

        pointLayer.Columns.Add(New FeatureSourceColumn("Time"))

        pointLayer.Columns.Add(New FeatureSourceColumn("Rdg"))

        pointLayer.Columns.Add(New FeatureSourceColumn("Rtyp"))

        pointLayer.Columns.Add(New FeatureSourceColumn("Units"))

 

        pointLayer.Close()

        pointOverlay.Layers.Add("rdgLayer", pointLayer)

        Form1.WinformsMap1.Overlays.Add("PointOverlay", pointOverlay)


 


Based on the OIL Value The map properly displays the correct Icon.


I would also Like to display a Label at each point with the Value of Rdg.


I am at a losss


 


 


 



Steve, 
  
 I’m shooting from the hip here (I usually try things before posting but I’ve been coding all day…) but I’d think you could create a text style and add it to CustomStyles (it’s a collection or list or something like that and can hold more than one style) since you can’t define a CustomStyle and a DefaultStyle at the same time or you get an error.  It’s not clear if you want the label to show only at under the same conditions as well; if so I’d think you could put the TextStyle in a second ValueStyle coded kind of like your original PointStyle stuck in the ValueStyle. 
  
 Allen

Basically I just want the value associated with Rdg to be displayed as text regardless of which OIL  ICON was selected.


Tried several routes and Just cant seem to get it right.


 



I’ll give my idea a try tomorrow morning unless someone comes up with a definite answer before then.

Wow.


Too Easy


Thanks for the Direction.  I have it working Perfectly.


 


 



Hello Steve, Allen, 
  
 Thanks for Allen sharing the experience, please feel free to let us know your problem. 
  
 Regards, 
  
 Gary

I have another requirement, that appears to simple for me to grasp.



I Have an inmemory feature layer  (userdrawing)   That I allow the user to draw basic objects.

Lines, Circles Polygons etc.  all work very nicely.



I would like to provide the ability to draw text. Each element would have its own font style.



The process eludes me, Without the creation of a point and creating a text style for the point.

I just want to create the text where the user clicks on the map.



This has to be a very simple process.






Hi Steve, 
  
 You want to create a text with its own style where you click, right? 
  
 I think you can create your own custom text style and override DrawCore function. 
  
 A point is necessary for label text, orelse program don’t know where to locate the label. If you don’t want to see the point, you can ignore to render it on map. 
  
 Then when you click on map, you should want to create a featurelayer for this function. You create your own text font builder, then build a feature based on pointshape and save all information in its columnvalues. Assign your custom style to this featurelayer, when drawcore, draw your font follow these information. 
  
 Wish that’s helpful. 
  
 Regards, 
  
 Don

I was kind of hoping it would be easier, but this is exactly what I expected.  I will create a point with transparent attributes and assign the text to it.


So, I gave that a try.   



When I call the Draw text.  I get the Text drawn.   However,  

I have a transparent point   textP(1)



The Text Object    text(1)



and A value   "Hello World."



I cant figure out how to use the Text value for display and and the Name to manage the object





This is the routine I am using.

As it stands all that displays is the object name    TEXT(1)



Public Sub DrawTextPoint(ByVal name As String, ByVal dtext As String, ByRef lyr As InMemoryFeatureLayer, ByVal fcolor As GeoColor, ByVal fnt As Drawing.Font, ByVal lat As Double, ByVal lon As Double)



        ’ Clear the Item If it Exists



        Try

            lyr.InternalFeatures.Remove(name) 'Attempt to remove the feature if it exists.

            For i As Integer = 0 To lyr.ZoomLevelSet.ZoomLevel01.CustomStyles.Count - 1

                If lyr.ZoomLevelSet.ZoomLevel01.CustomStyles(i).Name = name Then

                    lyr.ZoomLevelSet.ZoomLevel01.CustomStyles.RemoveAt(i)

                End If

            Next i

            lyr.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20



        Catch ex As Exception

        End Try



        ’ Create the Text Style

        Dim fstyle As TextStyle



             ’ Create the Point

        Dim columnValuesForLine As New Dictionary(Of String, String)

        columnValuesForLine.Add(“Name”, name)

    

        Dim ValueStyle As ValueStyle = New ValueStyle()

        ValueStyle.ColumnName = “Name”

        ValueStyle.Name = name

        ValueStyle.ValueItems.Add(New ValueItem(name, PointStyles.CreateSimplePointStyle(PointSymbolType.Square, GeoColor.SimpleColors.Transparent, GeoColor.SimpleColors.Transparent, 1, 1)))



        lyr.ZoomLevelSet.ZoomLevel01.CustomStyles.Add(ValueStyle)





        fstyle = TextStyles.CreateSimpleTextStyle(“Name”, fnt.FontFamily.Name, fnt.SizeInPoints, DrawingFontStyles.Bold, fcolor)

        lyr.ZoomLevelSet.ZoomLevel01.CustomStyles.Add(fstyle)







         lyr.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20





        ’ Add the point to the  layer

        Dim pt As PointShape = New PointShape(lon, lat)

        lyr.InternalFeatures.Add(name, New Feature(pt, columnValuesForLine))





    End Sub


So, I gave that a try.   

Just cant get the text to draw.



Here is the routine I am calling.

 Public Sub DrawTextPoint(ByVal name As String, ByVal dtext As String, ByRef lyr As InMemoryFeatureLayer, ByVal fcolor As GeoColor, ByVal fnt As Drawing.Font, ByVal lat As Double, ByVal lon As Double)





   ’ Clear the Item If it Exists



        Try

            lyr.InternalFeatures.Remove(name) 'Attempt to remove the feature if it exists.

            For i As Integer = 0 To lyr.ZoomLevelSet.ZoomLevel01.CustomStyles.Count - 1

                If lyr.ZoomLevelSet.ZoomLevel01.CustomStyles(i).Name = name Then

                    lyr.ZoomLevelSet.ZoomLevel01.CustomStyles.RemoveAt(i)

                End If

            Next i

            lyr.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20



        Catch ex As Exception

        End Try



        ’ Create the Text Style



         Dim columnValuesForLine As New Dictionary(Of String, String)

        columnValuesForLine.Add(“Name”, name)      ‘’  Something like “Text(2)”

        columnValuesForLine.Add(“Text”, dtext)         " The Text to display



        Dim ValueStyle As ValueStyle = New ValueStyle()

        ValueStyle.ColumnName = “Name”

        ValueStyle.Name = name

        Dim gfont As GeoFont = New GeoFont(fnt.FontFamily.Name, fnt.Size, fnt.Style)



        ValueStyle.ValueItems.Add(New ValueItem(name, TextStyles.CreateSimpleTextStyle(“Text”, gfont.FontName, gfont.Size, gfont.Style, fcolor)))



        lyr.ZoomLevelSet.ZoomLevel01.CustomStyles.Add(ValueStyle)

        lyr.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20





        ’ Add the point to the  layer

        Dim pt As PointShape = New PointShape(lon, lat)

        lyr.InternalFeatures.Add(name, New Feature(pt, columnValuesForLine))





    End Sub






Hi Steve, 
  
 I haven’t followed your code so I think maybe I cannot give you some advice. 
  
 Could you upload a simple test sample contains all your code for now so that I can help you about it? 
  
 Regards, 
  
 Don

I found my Issue.  I forgot to add the new Text column to the Layer 
  
  
 New Problem.    I want the user to have the ability to select a font , Size and Style from a Fontdialog. 
  
  I tried to Use the System.font.style  but it threw an exception on refresh. 
  It also appears to not change the font based on family name.  ( The Size Does seem to work Fine.) 
  
  It seem that I may have to create a custom Dialog for these settings. 
  
  Is the a list of available geofonts  and the Style enumerations available. 
  
  If is doesn’t exist I intend to Create a Routine  GeofontFromSystem()  
  
   
  
  
  


Hi Steve, 
  
 That’s cool you find your problem and solve it. 
  
 In fact you can try to use system’s dialog if possible, but it should not so well as you create your custom dialog. 
  
 We don’t have a list for GeoFont, but we have some default text styles, you can find them in TextStyles class. 
  
 If you found change family name the font won’t change, please try to recreate text style with new parameters and assign it to layer again. 
  
 Any question please let me know. 
  
 Regards, 
  
 Don