ThinkGeo.com    |     Documentation    |     Premium Support

Attribute based marker rendering

 I want to define a custom render for my custom layer derived from InMemoryFeatureLayer.  Basically, my renderer will look at certain attributes of my data and create a marker for each feature accordingly.  Can someone please provide me with a sample?


TIA.


K



Another angle to this question:  I see how one defines a style for a layer using ZoomLevelSet.  What I really need is to be able to dynamically define a style for each symbol based on attribute data during runtime.  How can this be done?     
  
 Klaus

Another angle to this question:  I see how one defines a style for a layer using ZoomLevelSet.  What I really need is to be able to dynamically define a style for each feature based on attribute data during runtime.  How can this be done?


I see the ValueStyle and ValueItem classes.  But I cannot create a collection of these as there will be too many.  I have a mathematical formular that gives me a picture and color to superimpose on the picture, based on two properties on my data.  During runtime, I want to create a PointStyle and assign this to a feature before it is drawn.  


Also is there a way to create a GeoImage from BitMapSource?



Klaus



Guys, any comments or is there some section of the API doc I should be looking at?



Hi Klaus, 



The attached sample contains adding marker with an InMemoryFeatureLayer; I'm not sure if you want to do as my way, please have a try. It also contains add a style randomly by your mathematical by inherit from MapSuite Style class. Hope it helps. 



The GeoImage is an object of intersection for rendering with Gdi+ and Wpf Visual, if we support BitmapSource, we cannot use it for the Gdi+ rendering for example the RenderTargetBitmap. So the best way is to convert it to stream; then pass to GeoImage. 



Please let me know if you have more queries,  



Thanks, 

Howard



Post7889.zip (12.5 KB)

Good stuff Howard.  This is exactly what I was looking for.  Let me give it a try.  Thanks again.

I have implemented my custom style as suggested.  I also overrode Style.GetRequiredColumnNamesCore to return those fields I need to compute my style.  I have the following questions: 



When the DrawCore method of my custom style is called, the features passed into method have those columns returned in GetRequiredColumnNamesCore  but they all have empty values even though I have added features with appropriate column values to my layer's 

InternalFeatures collection. 



What did I miss? 



Thanks again.



Hi Klaus,



If you are using InMemoryFeatureLayer, you need to add column definition before calling Draw method. I think you can try this:

InMemoryFeatureLayer inMemoryFeatureLayer = new InMemoryFeatureLayer();
inMemoryFeatureLayer.Open();
inMemoryFeatureLayer.Columns.Add(new FeatureSourceColumn("RequireColumnName1"));
inMemoryFeatureLayer.Columns.Add(new FeatureSourceColumn("RequireColumnName2"));
inMemoryFeatureLayer.Columns.Add(new FeatureSourceColumn("RequireColumnName3"));
inMemoryFeatureLayer.Close();



If the issue still exists, please show us the way you did.



Thanks,

Howard



Cool.  I thought simply adding your features was enough for the layer to infer column settings.  This is good though as all if this data is readily available from my application framework.


Again many thanks.



Klaus, 
  
   One other suggestion is to watch the video below.  It explains how to create your own custom styles and comes with some examples.  I think you will find it very helpful. 
  
 Extending Map Suite: Creating Custom Styles 
 gis.thinkgeo.com/Products/GISComponentsforNETDevelopers/MapSuiteDesktopEdition/Videos/tabid/679/Default.aspx 
  
 David

Thanks David.



Hi Klaus, 
  
 You are so welcome. Feel free to let us know if you have more queries. 
  
 Thanks, 
 Howard