ThinkGeo.com    |     Documentation    |     Premium Support

Display current zoom level

Just a very simple question. Of all the 1-20 levels on zoom, i wish to display on the screen which zoom level is currently on, is there any method?


 


 



Ric, 
  
 Every layer can have a different ZoomLevelSet, that means the same scale can be ZoomLevel10 for Layer1 and be ZoomLevel14 for Layer2. Here is the codes how to get the number of the current zoomLevel for one layer, you see here we need the CurrentExtentChanged event.  
 
   private void winformsMap1_CurrentExtentChanged(object sender, CurrentExtentChangedEventArgs e)
        {
            FeatureLayer featureLayer = (FeatureLayer)winformsMap1.StaticOverlay.Layers["WorldLayer"];
            ZoomLevel a = featureLayer.ZoomLevelSet.GetZoomLevel(winformsMap1.CurrentExtent, winformsMap1.Width, GeographyUnit.DecimalDegree);

            Collection<ZoomLevel> allZoomLevels = featureLayer.ZoomLevelSet.GetZoomLevels();
            int currentZoomLevel = allZoomLevels.IndexOf(a) + 1;
            lblCurrentZoomLevel.Text = currentZoomLevel.ToString();
        }
 
 Thanks, 
  
 Ben

Thanks Ben, i got it.

That’s great, Ric

Ben, i noticed something. This line of code worked with Winforms: 
 FeatureLayer featureLayer = (FeatureLayer)winformsMap1.StaticOverlay.Layers["ExpresswayLayer"]; 
  
 but when i use it in wpf, it caused an error "he given key was not present in the dictionary": 
 FeatureLayer featureLayer = (FeatureLayer)wpfMap1.StaticOverlay.Layers["ExpresswayLayer"]; 
  
 any ideas?

Ric, 
  
 I couldn’t recreate this issue. Can you try the following statement to get all the keys and check if the “ExpresswayLayer” is added there? 
 
wpfMap1.StaticOverlay.Layers.GetKeys();
 
 Thanks, 
  
 Ben

Ben,


Yes, "ExpresswayLayer" is in the key list. This is the code i used:




string test = null;
Collection<string> fff= wpfMap1.StaticOverlay.Layers.GetKeys();
foreach (string s in fff)
   {
    test = test + s +"\r\n";
   }
MessageBox.Show(test);



When i use "FindFeatureLayer", it worked:


FeatureLayer featureLayer = (FeatureLayer)wpfMap1.FindFeatureLayer("ExpresswayLayer");


I dont know if its a bug in wpf part, or something wrong i did. That layer was declared as below:




ShapeFileFeatureLayer expresswayLayer = new ShapeFileFeatureLayer(@"C:\Maps\expressway.shp");
expresswayLayer.ZoomLevelSet.ZoomLevel01.CustomStyles.Add(LineStyles.LocalRoad1);
expresswayLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;


and then it was added this way:


wpfMap1.StaticOverlay.Layers.Add("ExpresswayLayer", expresswayLayer);

 



Ric, 
  
 Still I couldn’t recreate your issue. Here is my code and it works fine. 
 
 private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            wpfMap1.MouseDown +=new System.Windows.Input.MouseButtonEventHandler(wpfMap1_MouseDown);
            wpfMap1.MapUnit = GeographyUnit.DecimalDegree;

            ShapeFileFeatureLayer expresswayLayer = new ShapeFileFeatureLayer(@“C:\Program Files\ThinkGeo\Map Suite Desktop Evaluation Edition 3.0 (BETA)\Samples\SampleData\Data\Austinstreets.shp”);
            expresswayLayer.ZoomLevelSet.ZoomLevel01.CustomStyles.Add(LineStyles.LocalRoad1);
            expresswayLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;

            wpfMap1.StaticOverlay.Layers.Add(“ExpresswayLayer”, expresswayLayer);

            expresswayLayer.Open();
            wpfMap1.CurrentExtent = expresswayLayer.GetBoundingBox();
            expresswayLayer.Close();

            wpfMap1.Refresh();
        }

        void wpfMap1_MouseDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
        {
            // No exception thrown here
            FeatureLayer featureLayer = (FeatureLayer)wpfMap1.StaticOverlay.Layers[“ExpresswayLayer”];
        }
 
  
 Thanks, 
  
 Ben