ThinkGeo.com    |     Documentation    |     Premium Support

Different line colors based on color array

I have a set of points and want to cycle through an array of different colors as I draw lines for these points.  Something like:






    Sub addLines()
        'pts is an array of vertexs

        'In page load I am doing:
        '  Dim lineLayer As New InMemoryFeatureLayer()
        '  lineLayer.ZoomLevelSet.ZoomLevel01.DefaultPointStyle = PointStyles.CreateSimplePointStyle(PointSymbolType.Circle, GeoColor.StandardColors.Green, 15)
        '  lineLayer.ZoomLevelSet.ZoomLevel01.DefaultTextStyle = TextStyles.CreateSimpleTextStyle("Name", "Arial", 12, DrawingFontStyles.Bold, GeoColor.StandardColors.Black)
        '  Dim dynOverlay As New LayerOverlay()
        '  dynOverlay.Layers.Add("LineLayer", lineLayer)
        '  WpfMap1.Overlays.Add("LineOverlay", dynOverlay)

        Dim c() As GeoColor = New GeoColor() {GeoColor.StandardColors.Brown, GeoColor.StandardColors.Red, GeoColor.StandardColors.Gray}
        Dim lineLayer As InMemoryFeatureLayer = DirectCast(WpfMap1.FindFeatureLayer("LineLayer"), InMemoryFeatureLayer)
        Dim lineStyle As LineStyle = New LineStyle(New GeoPen(GeoColor.FromArgb(150, GeoColor.StandardColors.Brown), 2))
        lineLayer.ZoomLevelSet.ZoomLevel01.CustomStyles.Add(lineStyle)
        lineLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20
        Dim j As Integer = 0

        For i As Integer = 0 To pts.count - 1 Step 2
            Dim lShape As New LineShape
            lShape.Vertices.Add(pts(i))
            lShape.Vertices.Add(pts(i + 1))
            Dim f As New Feature(lShape)
            lineLayer.InternalFeatures.Add(f)
            If j = c.Count - 1 Then
                j = 0
            Else
                j += 1
            End If
            lineStyle.InnerPen = New GeoPen(GeoColor.FromArgb(150, c(j)), 2)
        Next

    End Sub



But I am not getting any lines.  If I set the default, then all the lines are the same color.  What am I doing wrong, or is there a better way to do it?
Thanks

Hi Michael,



We recommend to use ValueStyle to set different color for the lines. This sample code might help. Please let me know if you have more queries.

wpfMap1.MapUnit = GeographyUnit.DecimalDegree

        Dim worldMapKitOverlay As New WorldMapKitWmsWpfOverlay()
        wpfMap1.Overlays.Add(worldMapKitOverlay)

        Dim valueStyle As New ValueStyle()
        valueStyle.ColumnName = "Index"

        Dim valueItem1 As New ValueItem()
        valueItem1.DefaultLineStyle = LineStyles.Highway1
        valueItem1.Value = 0
        valueStyle.ValueItems.Add(valueItem1)

        Dim valueItem2 As New ValueItem()
        valueItem2.DefaultLineStyle = LineStyles.DegreeLine1
        valueItem2.Value = 1
        valueStyle.ValueItems.Add(valueItem2)

        Dim valueItem3 As New ValueItem()
        valueItem3.DefaultLineStyle = LineStyles.Canal1
        valueItem3.Value = 2
        valueStyle.ValueItems.Add(valueItem3)

        Dim inMemoryFeatureLayer As New InMemoryFeatureLayer()
        inMemoryFeatureLayer.ZoomLevelSet.ZoomLevel01.CustomStyles.Add(valueStyle)
        inMemoryFeatureLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20
        inMemoryFeatureLayer.Open()
        inMemoryFeatureLayer.Columns.Add(New FeatureSourceColumn("Index"))
        inMemoryFeatureLayer.Close()

        Dim random As New Random()

        For index = 0 To 30
            Dim x1 As Double = random.Next(-180, 180)
            Dim x2 As Double = random.Next(-180, 180)
            Dim y1 As Double = random.Next(-90, 90)
            Dim y2 As Double = random.Next(-90, 90)
            Dim lineShape = New LineShape()
            lineShape.Vertices.Add(New Vertex(x1, y1))
            lineShape.Vertices.Add(New Vertex(x2, y2))

            Dim newFeature As Feature = New Feature(lineShape)
            newFeature.ColumnValues.Add("Index", index Mod 3)
            inMemoryFeatureLayer.InternalFeatures.Add(newFeature)
        Next

        Dim layerOverlay As New LayerOverlay()
        layerOverlay.TransitionEffect = TransitionEffect.None
        layerOverlay.Layers.Add("WorldLayer", inMemoryFeatureLayer)
        wpfMap1.Overlays.Add("WorldOverlay", layerOverlay)

        wpfMap1.CurrentExtent = New RectangleShape(-133.2515625, 89.2484375, 126.9046875, -88.290625)
        wpfMap1.Refresh()
 

Thanks,

Howard



This works perfect… thanks!

Hi Michael, 
  
 You are welcome; just feel free to let us know if you have more queries. 
  
 Thanks, 
 Howard