ThinkGeo.com    |     Documentation    |     Premium Support

ValueStyle and ClassBreaks

Hi,


It is my understanding that I cannot use ClassBreaks with data in Feature Column because Feature stores all info in String and ClassBreaks expects numeric value.


Correct?


Is there a way around it?


I  tried to use ValueStyle (see below), but no markers shopw up. What am I doing wrong?


 


 New ValueItem("2000", New PointStyle(PointSymbolType.Circle, New GeoSolidBrush(GeoColor.FromArgb(Alpha, 224, 251, 132)), symbolSize)))New ValueItem("4000", New PointStyle(PointSymbolType.Circle, New GeoSolidBrush(GeoColor.FromArgb(Alpha, 128, 255, 128)), symbolSize)))New ValueItem("6000", New PointStyle(PointSymbolType.Circle, New GeoSolidBrush(GeoColor.FromArgb(Alpha, 0, 255, 0)), symbolSize)))   


 


markerLayer.ZoomLevelSet.ZoomLevel01.CustomStyles.Add(valueStyle)


 


 



Jakub, 
  
 Yes, for ClassBreaks it should be numeric values, and if not the exception will throw when we intend to parse the column value that comes from your features.  
  
 The ClassBreakStyle is often useful for you to display features differently based on range of numeric values.  
 ValueStyle can accept string column for every ValueItem. If you choose ValueStyle that means it draw features only base on their values. 
 So only your features which have a special column value equal “2000” “4000” “6000” will be render. I think that shouldn’t what you want. 
  
 Regards, 
  
 Don

Thanks. No that is not what  I want.  
 So how do I convert the data in Feature column to numeric value for use in ClassBreak? They are Dbl numbers when I load them into the Feature. 


Jakub, 
  
 I think add a new column and add converted value into it maybe a solution, but I am not very sure about that. 
  
 I need some more detail about your scenario, could you provide us a simple sample with your data for that? So we can help you solve that. 
  
 If you don’t want to attach that in forum you can sent email to support@thinkgeo.com and ask him forward me or create a ticket and upload that. 
  
 Regards, 
  
 Don

Don I can send the whole solution as it is loading data from SQL. Problem is simple. 

I have a DataReader that loads points from the SQL. It loads thrre values, Lat, Lon, and Intensity. All double precission numbers. 

I load them into the Featurea nd into the MarkerLayer


--------------------------------------------


Dim value As Double 

Do While dtrMark.Read()
value = dtrMark("Result")
Dim feature As New Feature(CDbl(dtrMark("Longitude")), CDbl(dtrMark("Latitude")), value) 
feature.ColumnValues.Add("Crap", value)
markerLayer.InternalFeatures.Add(feature) 

Loop 
----------------------------------------------------------

Then I want to put them on the Google map color coded based on intensity. Nothing happens as the intensity comes in as String. How do I make it into a Double that the ClassBreakStyle casn read? 

-----------------------------------------------------------


'Applies class break style to show sample points of intensity of a field. 
Dim classBreakStyle As New ClassBreakStyle("Crap") 


Dim Alpha As Integer = 120
Dim symbolSize As Integer = 10 
 
classBreakStyle.ClassBreaks.Add(New ClassBreak(Double.MinValue, New PointStyle(PointSymbolType.Circle, New GeoSolidBrush(GeoColor.SimpleColors.Transparent), symbolSize)))
classBreakStyle.ClassBreaks.Add(New ClassBreak(10, New PointStyle(PointSymbolType.Circle, New GeoSolidBrush(GeoColor.FromArgb(Alpha, 255, 0, 0)), symbolSize)))(Alpha, 224, 251, 132)), symbolSize)))

classBreakStyle.ClassBreaks.Add(New ClassBreak(6000, New PointStyle(PointSymbolType.Circle, New GeoSolidBrush(GeoColor.FromArgb(Alpha, 0, 255, 0)), symbolSize)))

'loads points into InMemoryFeatureLayer 
markerLayer.ZoomLevelSet.ZoomLevel01.CustomStyles.Add(classBreakStyle) 



Jakub,


Attached is a real simple sample should solve your problem.


You should change your code:


1.    inMemoryLayer.Open()

        Dim item As New FeatureSourceColumn("Crap")

        inMemoryLayer.Columns.Add(item)


 


2.  inMemoryLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20


Wish helpful.


Regards,


Don



ThinkgeoDesktopSample.zip (12.3 KB)

Brilliant! 
 That worked great. 
 Thank you! 
  
 One more question :) 
 Is there a way to add a mouse over popup with the value for each marker? 


Jakub, 
  
 I think these posts should be helpful for your requirement. 
  
 gis.thinkgeo.com/Support/DiscussionForums/tabid/143/aff/12/aft/8789/afv/topic/Default.aspx#27905 
 gis.thinkgeo.com/Support/DiscussionForums/tabid/143/aff/12/aft/8735/afv/topic/Default.aspx#27603 
 gis.thinkgeo.com/Support/DiscussionForums/tabid/143/aff/12/aft/8701/afv/topic/Default.aspx#27324 
  
 Regards, 
  
 Don

Yes, that works great for a generic popup but not for displaying actual value in the feature.columnValue which is different for each marker. 


Jakub, 
  
 Are you using our InMemoryMarkerOverlay for that? 
  
 Regards, 
  
 Don

Yes, I am. 


Jakub, 
  
 Have you try to used the ClusterMarkerStyle for show the field in InMemoryMarkerOverlay? 
  
 Regards, 
  
 Don

I am not using cluster markers though. 
 I can display the popup, but it is the same for all markers. Holds the value of th last marker loaded into the layer. 


Jakub, 
  
 You should try the ClusterMarkerStyle, that should shows the value for corresponding marker. 
  
 I think we have sample for that in this post as below: 
  
 gis.thinkgeo.com/Support/DiscussionForums/tabid/143/aff/12/aft/8701/afv/topic/Default.aspx 
  
 Regards, 
  
 Don