ThinkGeo.com    |     Documentation    |     Premium Support

Set Zoomlevelset Dynamically

hey,


I was just wondering if you could set the beginning and end of the zoomlevelset dynamically i.e 


say


layer.FeatureLayer.ZoomLevelSet.ZoomLevel01.IsActive=false;


layer.FeatureLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel= ApplyUntilZoomLevel.Level06;


 
here instead of level01 i want it say level(x) where (x) is dynamic.
 
is that possible?

 


 by dynamic i mean the value is stored in some constant or a web.config file.



 say i do something like this


 


Layer.FeatureLayer.ZoomLevelSet = ThinkGeoMapExtensions.GetZooomLevelSet(5);


then can i set the isactive property??


 



public static ZoomLevelSet GetZooomLevelSet(int index)


        {


            return (ZoomLevelSet)Enum.Parse(typeof(ZoomLevelSet), "ZoomLevel" + string.Format("{0:00}", index));


        }




 Hi Anil,


ZoomLevelSet is not Enum type, so there maybe some problems when we pass typeof(ZoomLevelSet) to Enum.Parse(Type enumType, String value). You can try the following code to see if it fits your requirement.


 public static ZoomLevelSet GetZoomLevelSet(int beginZoomLevel,int endZoomLevel)

        {

            ZoomLevelSet zoomLevelSet = new ZoomLevelSet();

            switch (beginZoomLevel)

            {

                case 1:

                    zoomLevelSet.ZoomLevel01.IsActive = false;

                    ApplyUntilZoomLevelDynamically(zoomLevelSet.ZoomLevel01, endZoomLevel);

                    break;

                case 2:

                    zoomLevelSet.ZoomLevel02.IsActive = false;

                    ApplyUntilZoomLevelDynamically(zoomLevelSet.ZoomLevel02, endZoomLevel);

                    break;

                case 3:

                        ……………

                case 20:

                    zoomLevelSet.ZoomLevel20.IsActive = false;

                    ApplyUntilZoomLevelDynamically(zoomLevelSet.ZoomLevel20, endZoomLevel);

                    break;

                default:

                    break;

            }

            return zoomLevelSet;

        }

 

        private static void ApplyUntilZoomLevelDynamically(ZoomLevel zoomLevel, int endZoomLevel)

        {

            switch (endZoomLevel)

            {

                case 1:

                    zoomLevel.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level01;

                    break;

                case 2:

                    zoomLevel.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level02;

                    break;

                case 3:

                    ………………………

                case 20:

                    zoomLevel.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;

                    break;

                default:

                    break;

            }

        }


Any other questions please let us know.


Thanks,


Johnny



hey johnny, 
  
 this is an easy way of going about things. this is the first thing that comes to your mind when you want to do something dynamically but it is not the most best way to go about. 
  
 the enum way works. we have tried it in our app and it works fine. also to apply the styles to an index dynamically u can have something  like this 
  
 public static ZoomLevel GetZoomLevelAtIndex(this ZoomLevelSet zoomLevelSet, int zoomLevelIndex) 
         { 
             return zoomLevelSet.GetZoomLevels()[zoomLevelIndex - 1]; 
         } 
  
  
 Layer.ZoomLevelSet.GetZoomLevelAtIndex(_startZoomLevel).ApplyUntilZoomLevel=GetZoomLevelForApplyUntil(_endZoomLevel); 
  
 _startZoomLevel& _endZoomLevel are index values in int; 
  
  
  


on a different note 
  
 If i dont want the features to be rendered after a certain zoomlevel how can i achieve this??

Anil, 
  
 Thanks for you ideas, but I still have some issues when compiling the code.  
  
 The layer’s rendering bases on the Style, so please don’t set any style for the zoomlevel if you don’t want the features to be rendered after contains zoomevel. For example, if you don’t want them shown between zoomlevel 5 and 6, the code is like below: 
  
 Layer.ZoomlevelSet.ZoomLevel05. DefaultLineStyle = LineStyles.LocalRoad; 
 Layer.ZoomlevelSet.ZoomLevel05.ApplyTo = ZoomlevelSet.ZoomLevel06; 
 // but don’t set the style for zoomlevels after ZoomLvel06. 
  
 Thanks, 
  
 Johnny