ThinkGeo.com    |     Documentation    |     Premium Support

HeatStyle properties defined

Can anyone point me to an explanation for the properties of the HeatStyle class?  



What is the range for the HeatStyle.PointRadius and how is is the radius used in the HeatMap?   If I set the PointRadius less than 5 kilometers, I do not see any "HeatMap" at all.  If I set it to 100 Kilometers, the map response becomes very slow.   How do I determine what radius should be used with my data?  I am trying to plot a grid with a few thousand points with a grid cellwidth of 0.070 decimal degrees or approx 4400 meters between points…  



HeatStyle.Alpha seems to set the alpha value for all the GeoColors in the ColorPalette.  What is the purpose of the HeatStyle.PointIntensity?  How is it used?



What is the range for IntensityRangeStart and IntensityRangeEnd?  When my valuse are greater that 0, I get a heat map with various colors. When I try to plot a grid with values less that zero,  all I get is a constant gray background color.  When I try to plot a grid with values between 0.0 and 1.0, I get a few colors but not the variety that you would see with a broader range of 0.0 to 100.0 for example.  Is the HeatStyle IntensityRange only allowed with positive values greater than 1.0?



The ColorPalette is a full palette of 256 colors. Is it possible to reduce the number of colors to say 10-20 colors? For example, if I want the Heat Map to range from Red to Green but do not want to define all 256 colors to be shades of red to green.



Any help would be greatly appreciated.



Thank you in advance.



Richard


Hi Richard,


Please allow me to explain your questions one by one:


PointRadius: this property is the key of the HeatStyle. We
can regard its value like how far the points will be overlapped/clustered. So If
the value is too small, the points would be just like some normal circles, if
it’s too large, that will make the points overlap too depth each other and also
bring a bad performance. It’s truth that it is not easy to find out a proper
value for this property. But you can try the difference value between 5 and
100. Also you mentioned your grid cellwidth is about 4400 meters, so, I guess
you can try to set the pointRadius value as cellwidth*(5 or 10) as the cluster
range to make it looks better.


PointIntensity: just like the word meaning, the large the
value is, the point’s color will be brighter. The default of its value is 10. But
this property will be ignored if the IntensityRangeStart, IntensityRangeEnd and
the intensityColumnName are assigned at the same time. The intensityColumnName
which is from the feature’s column can be as the value of the PointIntensity
instead of the fixed value in the HeatStyle constructor. For example, if there
is a column named “population”, then we can combine those three property to get
this scene: the more population in this area, the brighter this area will be.


ColorPalette: you are right it’s a full palette. But you can
free to configure them. For example:


 


            heatLayer.HeatStyle.ColorPalette.Clear();
            heatLayer.HeatStyle.ColorPalette.Add(GeoColor.FromArgb(255, 0, 0, 0));
            heatLayer.HeatStyle.ColorPalette.Add(GeoColor.FromArgb(254, 0, 0, 0));
            heatLayer.HeatStyle.ColorPalette.Add(GeoColor.FromArgb(253, 0, 0, 0));
            heatLayer.HeatStyle.ColorPalette.Add(GeoColor.FromArgb(252, 0, 0, 0));

            heatLayer.HeatStyle.ColorPalette.Add(GeoColor.FromArgb(255, 255, 0, 0));


If there is anything confused, don’t hesitate to let us
know.


Regards,


Johnny




Hi Johnny,

Can you please elaborate about how to set the ColorPalette. I’m creating a heat map and rather than using all colors, I would like to use only shades of red if that is possible.  I tried the example but I get an error “Index was out of range.  Must be non-negative and less than the size of the collection.  Parameter name: index”.  It works fine if I just use the default color palette.

Here’s my code



Dim dbfcol As ThinkGeo.MapSuite.Core.DbfColumn

Dim fc As New Collection(Of ThinkGeo.MapSuite.Core.DbfColumn)

Dim fs As FeatureSource



Dim heatStyle As HeatStyle

Dim heatLayer As HeatLayer

Dim heatMapOverlay As LayerOverlay



Dim pt As PointShape

Dim shpfileName As String = “”

        



    shpfileName = “trphst.shp”

       

'CREATE the shape file

        dbfcol = New DbfColumn(“PointName”, DbfColumnType.String, 80, 0)

        fc.Add(dbfcol)

        dbfcol = New DbfColumn(“PointStyle”, DbfColumnType.String, 80, 0)

        fc.Add(dbfcol)

       

        ShapeFileFeatureSource.CreateShapeFile(ShapeFileType.Point, shpfileName, fc)

        

    

'OPEN the shape file

     fs = New ShapeFileFeatureSource(shpfileName, readWriteMode:=ShapeFileReadWriteMode.ReadWrite)

    fs.Open()

        fs.BeginTransaction()





'ADD points 

    For Each triphistrec In colTripHist

        pt = New PointShape

            pt.Y = triphistrec.y

            pt.X = triphistrec.x

            f = pt.GetFeature

            f.ColumnValues.Add(“PointName”, .sOrigin)

            f.ColumnValues.Add(“PointStyle”, “origin”)



            fs.AddFeature(f)

    Next triphistrec 



    

'CLOSE the shape file

        fs.CommitTransaction()

        fs.Close()



'SET HEAT STYLE

        heatLayer = New HeatLayer(fs)

        heatStyle = New HeatStyle

        heatLayer.Transparency = 150



        heatStyle.Alpha = 255

        heatStyle.ColorPalette.Clear()

        heatStyle.ColorPalette.Add(GeoColor.FromArgb(255, 0, 0, 0))

        heatStyle.ColorPalette.Add(GeoColor.FromArgb(254, 0, 0, 0))

        heatStyle.ColorPalette.Add(GeoColor.FromArgb(253, 0, 0, 0))

        heatStyle.ColorPalette.Add(GeoColor.FromArgb(252, 0, 0, 0))

        heatStyle.ColorPalette.Add(GeoColor.FromArgb(251, 0, 0, 0))

        heatStyle.ColorPalette.Add(GeoColor.FromArgb(250, 0, 0, 0))

        heatStyle.ColorPalette.Add(GeoColor.FromArgb(249, 0, 0, 0))

        heatStyle.ColorPalette.Add(GeoColor.FromArgb(248, 0, 0, 0))

        heatStyle.ColorPalette.Add(GeoColor.FromArgb(247, 0, 0, 0))

        heatStyle.ColorPalette.Add(GeoColor.FromArgb(246, 0, 0, 0))

        heatStyle.ColorPalette.Add(GeoColor.FromArgb(245, 0, 0, 0))

        heatStyle.ColorPalette.Add(GeoColor.FromArgb(244, 0, 0, 0))

        heatStyle.ColorPalette.Add(GeoColor.FromArgb(243, 0, 0, 0))

        heatStyle.ColorPalette.Add(GeoColor.FromArgb(242, 0, 0, 0))

        heatStyle.ColorPalette.Add(GeoColor.FromArgb(241, 0, 0, 0))

        heatStyle.ColorPalette.Add(GeoColor.FromArgb(240, 0, 0, 0))

        heatStyle.ColorPalette.Add(GeoColor.FromArgb(255, 255, 0, 0))



        heatStyle.PointRadius = 0.5

        heatStyle.PointRadiusUnit = DistanceUnit.Mile

        heatStyle.PointIntensity = 10



’ADD the heat layer to the map

        heatLayer.HeatStyle = heatStyle

        heatMapOverlay = New LayerOverlay

        heatMapOverlay.Layers.Add(heatLayer)



        atismap.Overlays.Add(“HeatOverlay”, heatMapOverlay)

        atismap.Refresh()

     

Hi Serana, 
  
 Thanks for your code, sorry I haven’t succeed reproduced your issue local because I don’t know the “colTripHist”. 
  
 But from your exception, it looks like the exception isn’t thrown from ColorPalette. Does that exception is thrown by “fs.AddFeature(f)”? 
  
 A simple project should be very helpful, or more detail exception trace log is useful for us. 
  
 Regards, 
  
 Don

I’ve attached a simple project to demonstrate the issue.  Let me know if you need anything more.  Thanks!



Serena Lucy

TripHistoryAnalysis.zip (133 KB)

Hi Serana, 
  
 Thanks for your sample, that’s very helpful to locate the issue. 
  
 Sorry Johnny’s reply should be incorrect, I found we have to set at least 256 values for heatStyle.ColorPalette, or else exception will be thrown. 
  
 I think you can create a custom function for fill colors between your exsiting colors. 
  
 We have two functions should be helpful to calculate it: 
  
 They are GeoColor.GetColorsInHueFamily and GeoColor.GetColorsInQualityFamily. 
  
 Wish that’s helpful. 
  
 Regards 
  
 Don