ThinkGeo.com    |     Documentation    |     Premium Support

Zoom Step is too big

Hello,



I use below code to let user to zoom in:


private void ZoomInCommandExecute()
{
    var printerOverlay = (PrinterInteractiveOverlay) MapControl.InteractiveOverlays[Printpreviewoverlay];
    var mapPrinterLayer = ((MapPrinterLayer) (printerOverlay.PrinterLayers[Maplayer]));
 
 
    var zoomLevelSet = new ZoomLevelSet();
    double currentScale = ExtentHelper.GetScale(worldExtent: mapPrinterLayer.MapExtent, screenWidth: (float) mapPrinterLayer.GetBoundingBox().Width, worldExtentUnit: mapPrinterLayer.MapUnit);
    double newScale =
        ZoomLevelSet.GetLowerZoomLevelScale(currentScale: currentScale, zoomLevelSet: zoomLevelSet);
     
    mapPrinterLayer.MapExtent = ExtentHelper.ZoomToScale(targetScale: newScale, worldExtent: mapPrinterLayer.MapExtent, worldExtentUnit: mapPrinterLayer.MapUnit, screenWidth: (float) mapPrinterLayer.GetBoundingBox().Width, screenHeight: (float) mapPrinterLayer.GetBoundingBox().Height);
 
 
    MapControl.Refresh();
}

This code has been used in printing sample, my scenario is printing also.

When trying to fit a map into the page perfectly, the zoom in/out options steps in/out too much.

How do I reduce the zoom step?



Thank you,

Sean


Hi Shaahin, 
  
 As I see, your problem is when trying to zoom the map perfectly to the extent which you want, there are too many steps. I think this problem can be resolved by reducing the count of zoom levels in the ZoomLevelSet. Would you please add the code below to you sample and see if it works.  
  
 var zoomLevelSet = new ZoomLevelSet(); 
  
             for (int i = 0; i < new ZoomLevelSet().GetZoomLevels().Count; i++) 
             { 
                 if (i % 3 == 0) 
                 { 
                     zoomLevelSet.CustomZoomLevels.Add(zoomLevelSet.GetZoomLevels()); 
                 } 
             } 
  
  
 The default count of zoom levels in a ZoomLevelSet is 20, I just add third of them to the CustomZoomLevels, thus the count of zoomLevelSet object is just 7, it will take fewer steps to zoom in/out. 
  
 Hope it helps! 
  
 Thanks, 
  
 Don

Hi Don, 
  
 Thank you for the sample code and your answer. 
 Actually as I tried your code the zoom step get bigger! This is exactly my problem, I want to make the zoom step smaller. 
  
 Would you please check it again and inform me? or if you think I am wrong a light sample would be appreciated. 
  
 Thanks, 
  
 Sean

Hi Sean, 
  
 I think I misunderstand you in last reply. 
  
 Do you want to keep the zoom level count but make each zoom level zoom smaller deep? 
  
 The deep is related scale value for each level, so you can control it by change scale value. For example: 
  
  for (int i = 0; i <= Map1.ZoomLevelSet.GetZoomLevels().Count - 1; i++) 
             { 
                 Map1.ZoomLevelSet.GetZoomLevels().Scale = Map1.ZoomLevelSet.GetZoomLevels().Scale / 10; 
             } 
  
 Regards, 
  
 Don