ThinkGeo.com    |     Documentation    |     Premium Support

Why won't WinFormsMap.CurrentScale Change?

I have a TrackBar Control (MapScaleBar) with 10 values and am attempting to change the CurrentScale using the following code:


double NewZoomLevel = 5000.00;    //0


switch (MapScaleBar.Value)

{

    case 1:

        NewZoomLevel = 7500.00;

        break;

    case 2:

        NewZoomLevel = 15000.00;

        break;

    case 3:

        NewZoomLevel = 25000.00;

        break;

    case 4:

        NewZoomLevel = 40000.00;

        break;

    case 5:

        NewZoomLevel = 50000.00;

        break;

    case 6:

        NewZoomLevel = 70000.00;

        break;

    case 7:

        NewZoomLevel = 90000.00;

        break;

    case 8:

        NewZoomLevel = 150000.00;

        break;

    case 9:

        NewZoomLevel = 300000.00;

        break;

    case 10:

        NewZoomLevel = 800000.00;

        break;


}


MapControl.CurrentScale = NewZoomLevel;


But it doesn't change.  The CurrentScale remains as before with no change.


MapControl.CurrentScale = 72093.7243652344

NewZoomLevel = 50000.0


What am I doing wrong?  Thanks!!


bob



 Hi Bob,


 
Did you call “MapControl.Refresh()” after setting the “MapControl.CurrentScale=NewZoomlevel”?
Another thing is if you want to use your own zoomlevel, the  MapControl.ZoomLevelSet.CustomZoomLevels needs to be set, attached is the sample code we tested, could you have a try.
 
If any question, feel free to ask!
 
Johnny

Post11095.txt (1.5 KB)

Johnny, 
  
 The custom zoom levels seem to be the trick!  I’ll need to refine the numbers, but I’m now getting what I’m looking for.   
  
 THANK YOU!! 
  
 bob

 Hi Bob,


I'm sorry that i didn't explain the CustomZoomLevels very clearly before. It's designed for the requirements that the Map Suite default zoom levels don't fit some special requirements. If we use CustomZoomLvels, the map control will ignore the default zoom levels and calculate the map's current scale based on the map's width/height and current extent, and then use the calculated scale to get a zoom level whose scale is closest to the calculated scale. So I guess the current extent in your demo may be out of range in your CustomZoomLevels and the map will take the biggest/smallest zoom levels all the time.


Besides, the method "GetScale" in ExtentHelper class might be useful to you, It can calculate the map's scale based on current extent and size. please check it out.


 


Best Regards.


Johnny