ThinkGeo.com    |     Documentation    |     Premium Support

Best way to handle variable zoom levels for shape layers?

The implementation I’m working on will be loading a wide variety of shape files at various full-extent scales.  Using your samples I’ve implemented a GetFullExtent based on layer.GetBoundingBox in order to set the initial map extent to display the full “map” when loaded.  However, I’m not entirely sure how extent maps to scale factor.  I had first thought perhaps it was based on Max(width,height) of the extent rectangle.  Or perhaps diagonal of the box.  But when I get the CurrentScaleChanged event for the full extent set, there seems to be no obvious conversion. For instance, with an extent of (W:95650, H:87327), I get a scale of 191301.  And then in CurrentExtentChanged I get an CurrentExtentChangedWinformsMapEventArgs.CurrentExtent with (w:225509, h:119729), which is quite different from the extent I set.  And for different “maps” (shape file sets), these values (for full extent result) will be different by as much as 2 orders of magnitude.



So what I’m trying to do is setup Zoom Levels that fit well with the shape files provided.  Zoom Level 1 should be roughly 2* the scale required to show the full set of shape file shapes (2 x full extent).  Each zoom level zooming in should zoom by a factor of 0.5 scale.  If zoom level 1 is 1000, then zoom level 2 should be 500, and so on.  I also have layers that need to come and go based on these zoom levels.  For instance, “layer-X” is visible only from ZoomLevel3 through ZoomLevel10, where zoom levels are defined as indicated based off full extent.



By simply adding a fudge factor to get from “extent” to “scale”, I’ve made it sort of work.  But it should be possible to accurately predict my zoom scales based on extent, and that’s the main function I’m missing.  Once I’ve got that, the sample on determining current zoom level should wrap this up, though if there is a better way, I’m interested.  



Thanks for your help.



Hi Russ, 
  
 It looks you want to make the map shows the best effect based on the bounding box of your different shapes. If I misunderstand that please let me know. 
  
 But for our zoomlevel set, it have a snap mode for select, the default value equal SnapUp, that means if you set the value of current extent but it’s not in any zoomlevel, the rendered extent is not what you want. (For example, your extent convert to scale is 1200, but we only have two level 1000 and 5000 near it, then we will snap the scale to our existing level, and the new extent won’t be the one you set). 
  
 So you should want to set ZoomLevelSnappingMode value to none, then you can just get boudingbox of your new shape file and assign the rectangle shape to current extent. 
  
 Regards, 
  
 Don