ThinkGeo.com    |     Documentation    |     Premium Support

Multiple Styles in EditInteractiveOverlay

Hi...


I have a bunch of features each with their own style, defined in xml.  I accomplish this by creating my own layers and override the Draw(...) method to draw each feature as described in the xml.  I now want to put these features in the EditInteractiveOverlay, which is fine, but I also want them to have their same unique styles.  There is no way to create my own InMemoryFeatureLayer to use instead of EditShapesLayer which has this custom drawing logic as EditShapesLayer is read only... 


How would you suggest I go about allowing my users to edit features which each have their own unique style?


 


 


 


Thanks,


.Ryan.



I read several times your post and I still have some difficulties understanding what you are trying to accomplish exactely. Can you reexplain a little bit more? Also, it would help if you can send us a sample of what you have right now. That would help us understanding more concretely what your case along with the explanation. Thankn you.

Sorry for being unclear, let me try again… 
  
 Basically, I let the user draw on the map using TrackInteractiveOverlay.  When drawing a shape, the user can select the line color/thickness and fill color, which we store in the database as XML.  We then display those shapes in a custom FeatureLayer which reads the XML associated with each drawing and draws it accordingly.  All this logic is done in the DrawCore(…) method.  This allows us to draw all shapes in a single layer regardless of style, but by using XML (and WKT for shape definition) allows the drawing to be consumable by other applications.  All this works perfectly. 
  
 I would now like to give the users the ability to edit the shapes that they have drawn, which I can do by moving all the Features from my layer to the EditInteractiveOverlay.  The only problem is that I would like each of the shapes to be drawn with their same styles (as defined in the XML).  At the moment, every shape in the EditInteractiveOverlay is drawn according to the default styles defined on the EditShapesLayer. 
  
 That is what I want to do.  I thought the easiest way to achieve this would be to create my own custom layer to use in place of the EditShapesLayer that has the logic to style based off XML, however there is no setter on the EditShapesLayer property, so there is no way for me to use my layer instead. 
  
 I hope this is more clear.   It would be difficult for me to make a demo as I have a lot of other stuff going on that I would have to strip out, but if necessary, I suppose I could do that. 
  
 Thanks, 
  
 .Ryan.

Hi Ryan, 
  
  I have a very similar scenario as every shape in my app has its own style (color, thickness, etc) which definition is stored as XML within the database, being drawn all of them in a single FeatureLayer. In my case I wrote a CustomStyle instead of a CustomFeatureLayer to achieve it, so is the CustomStyle the one who overwrites the DrawCore and uses the database stored XML shape style definitions to uniquely style each one. 
  
  I don’t use the InteractiveOverlay yet, but maybe it allows to use CustomStyles so you can approach your problem that way… 
  
 Carlos.

 Ryan,


I would approach it the way Carlos did and create your own custom style that reads the style information from your XML file.  This way you could use the same custom style to render your shapes for your CustomFeatureLayer and on EditLayer within the EditOverlay.


It sounds like you already have most of the coding done and all that is left is taking the logic out of the CustomFeatureLayer and breaking it out into a custom style.  For some guidance on how to build a custom style check out the Extending Map Suite: Creating Custom Styles video and sample project at the link below:


gis.thinkgeo.com/Products/GI...fault.aspx


These videos are a little old but the concepts and still the same, also for more examples of some custom styles check out the Style Samples on the wiki.


Let us know if you have any questions.


Thanks!