ThinkGeo.com    |     Documentation    |     Premium Support

Compound/Relative/Multi Feature Capability?

In our application, we’d like to place an independently selectable “secondary” feature (feature B) that’s always offset relative to another independently selectable “main” feature (feature A) in the map.  This would mean, when zooming, the two features are always the same pixel distance apart.  Is there any such “Relative” or “Compound” feature capability?  Or, is there an example of this?


Thanks,


Greg



Greg, 
  
 You can add two layers with the same feature source, set styles for them, just make offset for one of them. For example, the feature is point type, the code should like: 
             PointStyle style1 = new PointStyle(…); 
             layer1.ZoomLevelSet.ZoomLevel01.DefaultPointStyle = style1; 
  
             PointStyle style2 = new PointStyle(…); 
             style2.XOffsetInPixel = 10; 
             style2.YOffsetInPixel = 10; 
             layer2.ZoomLevelSet.ZoomLevel01.DefaultPointStyle = style2; 
  
 Thanks, 
 James

Thank You James!


I do have a question about this solution, however...  Does setting the offset in the Style shift where the Feature is located in terms of selection?  Or, does the offset only impact where the feature is rendered?


-Greg



 Greg,


 
The style only impact where the feature is rendered, if you want to shift where the feature is located, you can use Projection and set datum shift. There is a sample you can look at
wiki.thinkgeo.com/wiki/Map_Suite_Wpf_Desktop_Edition_Projection_Samples#Spherical_Mercator_Projection_Adjustment
 
Thanks,
James

Hi James, 



Are you suggesting that I project my secondary feature each time I zoom-in/zoom-out and rotate?  That is the only way I can think of that will keep the secondary feature: 



1) Independently selectable 

2) Always appear to be offset the same pixel distance relative to my primary feature. 



I'm using a QuadTree and I can see how this will get very nasty / cumbersome because I'd have to update the QuadTree with the secondary feature's location each time I zoom / rotate.  Also, I have a very large number features too, so I'm concerned how this would impact performance. 



Thanks, 

Greg



Greg, 
  
 If you concern the performance, I suggest you save projected features to another shp files, so that you won’t need to project them on the fly. You can first call API ShapeFileFeatureLayer.SaveToProjection()  
  
 Thanks, 
 James

Hi James. 
  
 Either I don’t understand your proposed solution, or you don’t understand the capability I am after.  I’m am not sure which it is, at this point… sorry.  Please bare with me. 
  
 If I have 2 features, and I provide them with a specific location in my map, then, as I zoom-in or zoom-out, the pixel distance between the two features on my screen will change as I zoom, which is obviously the regular, expected behavior.  However, I don’t want the regular, expected behavior as I believe there is a HFE/UI need to give the user more context around state of an object, and included with this improved state, a way to independently click on some visual object representing the state.   
  
 In other words, I don’t want this pixel difference to change between two “features” as I zoom… both in terms of selection and rendering.  I want a multi-part, complex feature with independently rendered, contextually selectable areas that provide the user with a better UI experience.  Or… another way of looking at this is… a secondary feature that is always the same number of pixels away from a primary feature, regardless of the zoom-level, etc. 
  
 Does my explanation make sense?   I’m going to think about this more on my end… maybe there is something I can do with using 1 feature with different rendered bitmaps, and then I could calculate a vector, in pixels, from the feature’s origin and where the user clicked, and compare that against some known location representing a secondary feature to determine what part the user clicked on. 
  
 Thanks, 
 Greg

Greg, 
  
 I knew what you want, but you concern the performance if use offset for style, at least you can try it, I don’t think the performance is so bad. Set offset is based on screen coordinates. 
  
 And also about “Independently selectable”, how do you select any feature, we don’t have API to do it, I think you have already create some logic to do it, so if you want to Independently selectable, you just add the logic to check if the virtual one is select or not by applying offset as well. 
  
 Thanks, 
 James