ThinkGeo.com    |     Documentation    |     Premium Support

CustomZoomLevels and IsActive

Hi,


I have created 36 custom ZoomLevels for use with my project.  I have applied these both to the map, so it will snap to these levels and also to each feature layer that is opened.  I can set a different style for each zoom level and that works fine.  The map correctly snaps to the custom zoom levels as well.


Now what I would like to do is to be able to set the custom zoom levels in such a way that the feature layer will only be visible at certain zoom levels.  Typically, a layer with a large number of tiny details in it would only be visible when zoomed in close and would disappear when zoomed out past a certain zoom level (scale).


From the documentation It appeared I could use the IsActive property on each of the custom zoom levels to disable drawing at those scales.  However, when I set IsActive to False it doesn't seem to have any effect and the layer still renders at all zoom levels.


What do I have to do to make this work?


Thanks,


Steve


 


 


 


 



Steven,


Just make sure you are not using cache system for your overlay, otherwise, the problem is probably hidden there.
I tested the IsActive property and it works fine, see following code snippet, you can see the difference by commenting the IsAcitve of zoomlevel2.

winformsMap1.MapUnit = GeographyUnit.DecimalDegree;
winformsMap1.BackgroundOverlay.BackgroundBrush = new GeoSolidBrush(GeoColor.GeographicColors.ShallowOcean);
 
ShapeFileFeatureLayer worldLayer = new ShapeFileFeatureLayer(@"..\..\SampleData\Data\Countries02.shp");
          
ZoomLevel zoomLevel1 = new ZoomLevel(590591790);
zoomLevel1.DefaultAreaStyle = AreaStyles.CreateSimpleAreaStyle(GeoColor.SimpleColors.Transparent, GeoColor.FromArgb(100, GeoColor.SimpleColors.Green));
 
ZoomLevel zoomLevel2 = new ZoomLevel(1153499.58984375);
zoomLevel2.DefaultAreaStyle = AreaStyles.CreateSimpleAreaStyle(GeoColor.SimpleColors.Transparent, GeoColor.FromArgb(100, GeoColor.SimpleColors.Red));
zoomLevel2.IsActive = false;
 
ZoomLevel zoomLevel3 = new ZoomLevel(18023.431091308594);
zoomLevel3.DefaultAreaStyle = AreaStyles.CreateSimpleAreaStyle(GeoColor.SimpleColors.Transparent, GeoColor.FromArgb(100, GeoColor.SimpleColors.Yellow));
 
worldLayer.ZoomLevelSet.CustomZoomLevels.Add(zoomLevel1);
worldLayer.ZoomLevelSet.CustomZoomLevels.Add(zoomLevel2);
worldLayer.ZoomLevelSet.CustomZoomLevels.Add(zoomLevel3);
 
//worldLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle = AreaStyles.CreateSimpleAreaStyle(GeoColor.SimpleColors.Transparent, GeoColor.FromArgb(100, GeoColor.SimpleColors.Green));
//worldLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
 
LayerOverlay staticOverlay = new LayerOverlay();
staticOverlay.Layers.Add("WorldLayer", worldLayer);
            
winformsMap1.Overlays.Add("WorldOverlay", staticOverlay);
            
winformsMap1.CurrentExtent = new RectangleShape(-139.2, 92.4, 120.9, -93.2);
winformsMap1.Refresh();

Any more questions please feel free to let me know.
Thanks.
Yale

Hi Yale, 
  
 Thanks for responding. 
  
 I think I must be misunderstanding what IsActive means.  I though if you set IsActive to false the features would not draw at that zoom level.  Using your sample code the features are still drawing, they just don’t use the symbol that was defined for the inactive zoom level.  How do I cause the entire feature layer to not draw at specified zoom levels? 
  
 Thanks! 
  
 Steve

Steve,


Thanks for your post and questions.


I think I also misunderstood your requirement. The IsActive property will just like inactivate the zoomlevel from the zoomlevelset list. One possible way I can think out to achieve your idea is try to set the IsVisible property on the layer on those specified zoom levels, hope it works.



layer.IsVisible = false;

Any more questions or ideas please feel free to let me know.


Thanks.


Yale

 



Yale, 
  
 Thanks for the clarification.  Another method I have found that works is to set the Style for the Zoom level to one that is completely transparent.  I don’t know which solution would provide the best performance. 
  
 Steve

Steve,


 
Thanks for your post and sharing on ideas.
 
Yes, I agree that the solution to set the color to transparent should also work, and personally I think both solutions should work fine because they have little affects on performance.
 
Any more questions please feel free to let me know.
 
Thanks.
 
Yale