ThinkGeo.com    |     Documentation    |     Premium Support

Max Zoom Level

How can I get the map to zoom in more that 1:10m ? My map is using MapUnits of DecimalDegree and all my layers are custom layers. with custom zoom level sets


 


I need to be able to zoom at least to a 1:1 ratio.



Jeremy, 
  
 After setting the ZoomLevel scale on Server side, you can synchronize it with client side by calling the method Map1.SyncClientZoomLevels. In another word, you can set the scale of server sde zoomlevel to 1 and synchronize it to client side, you then can zoom in to scale 1. Please have a look the sample NavigateTheMap->ZoomLevelsLessThan20 for more reference. 
  
 If you still have problem, could you please let me know what the "custom layers" are and how do you set the "custom zoom level sets"? 
  
 Thanks, 
  
 Ben

All my layers are custom zoom levels, and could be anything. What we are doing is building a configuration system onto map suite so we can configure any of our clients applications quickly. because of these different zoom levels that map suite uses (instead of a max and min scale) I end up creating basically a blank zoom level set at the end of my array with a scale of 1. 
  
 Therefore I would have the following as a simplified step through my code: 
  
 ZoomLevel customZoomLevel1;  
 ZoomLevel customZoomLevel2;  
 ZoomLevel EndZoomLevel;  
  
 //Apply styling and scale to customZoomLevel1;  
 customZoomLevel1.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level02;  
  
 //Apply styling and scale to customZoomLevel2;  
 customZoomLevel2.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level03;  
  
 EndZoomLevel.scale = 0;  
  
 ZoomLevelSet CustomZoomLevelSet = new ZoomLevelSet(); 
 CustomZoomLevelSet.CustomZoomLevels.Add(customZoomLevel1);  
 CustomZoomLevelSet.CustomZoomLevels.Add(customZoomLevel2);  
 CustomZoomLevelSet.CustomZoomLevels.Add(EndZoomLevel);  
  
 MyLayer.ZoomLevelSet = CustomZoomLevelSet;  
 Map1.StaticOverlay.Layers.Add(MyLayer.Name, MyLayer);  
 Map1.SyncClientZoomLevels(MapLayer.ZoomLevelSet); 
  
 Map1.SyncClientZoomLevels(MapLayer.ZoomLevelSet);  
  
 //all of this would be in a loop iterating through all the layers in my configuration

I have run through your example, but it doesn’t do what I want. Sure I can get to a scale of less than 1:1 but it sacrifices the in between scales. 
  
 Let me try to explain. 
  
 If I declare 2 custom zoom levels. The first being my full extent for my layer, the second begin the maximum zoom level of that layer. i.e.  
 first scale: 1:1000000 
 second scale: 1:1 
  
 I still want to be able to zoom in at varying factors of scale even though I have only declared 2 zoom levels. 
  
 What your example does is it in effect removes all zoom levels except five. So I assume what mapsuite does when I zoom in, is that it it increments your currentzoomlevel status. 
  
 So if I’m at zoom level01 and I zoom in once, I’m not at zoomlevel02.  As I said this is an assumption.   When I zoom in I want to be able to zoom in by a factor of my current scale i.e. scale = currentScale*1.5f; 
  
 Prehaps the problem is occuring because I am missunderstanding the ApplyUntilZoomLevel command when I am working with CustomZoomLevels. 
  
 if I have 2 CustomZoomLevels: 
  
 CustomZoomLevel01 and CustomZoomLevel02 in my zoom LevelSet 
  
 ZoomLevelSet CustomZoomLevelSet = new ZoomLevelSet(); 
  
 CustomZoomLevelSet.CustomZoomLevels.Add(CustomZoomLevel01);  
 CustomZoomLevelSet.CustomZoomLevels.Add(CustomZoomLevel02);  
  
 And I apply CustomZoomLevel01.ApplyUntilZoomLevel.Level02; is it applying the zoom level to my CustomZoomLevelSet.CustomZoomLevels[1].Scale or until CustomZoomLevelSet.ZoomLevel02.Scale? 
  
 if it is the later, then this seems like a massive floor in using custom zoom levels. Especially since the whole reason we are using custom zoom levels is so we can specify our scales.

 


Jeremy,
 
Whenever using the CustomZoomLevels, the property ZoomLevel.ApplyUntilZoomLevel doesn’t work right. The main reason is ApplyUntilZoomLevel is an enumeration which has only 20 items, if we added 25 ZoomLevels for example, it will be out of reach. We will figure out some new way to implement this, Sorry for the inconvenience now.
 
If you do not use ApplyUntilZoomLevel, the CustomZoomLevels will work fine I think. Here attached is an example where I added 21 ZoomLevels to the map and everything seems fine.  Please have a look.

      worldLayer.ZoomLevelSet.CustomZoomLevels.Add(GetZoomLevel(1000000000, GeoColor.SimpleColors.Red));
            worldLayer.ZoomLevelSet.CustomZoomLevels.Add(GetZoomLevel(500000000, GeoColor.SimpleColors.Yellow));
            worldLayer.ZoomLevelSet.CustomZoomLevels.Add(GetZoomLevel(250000000, GeoColor.SimpleColors.Green));
            worldLayer.ZoomLevelSet.CustomZoomLevels.Add(GetZoomLevel(125000000, GeoColor.SimpleColors.Blue));
            worldLayer.ZoomLevelSet.CustomZoomLevels.Add(GetZoomLevel(62500000, GeoColor.SimpleColors.Orange));
            worldLayer.ZoomLevelSet.CustomZoomLevels.Add(GetZoomLevel(31250000, GeoColor.SimpleColors.Silver));
            worldLayer.ZoomLevelSet.CustomZoomLevels.Add(GetZoomLevel(15625000, GeoColor.SimpleColors.Black));
            worldLayer.ZoomLevelSet.CustomZoomLevels.Add(GetZoomLevel(7812500, GeoColor.SimpleColors.Gold));
            worldLayer.ZoomLevelSet.CustomZoomLevels.Add(GetZoomLevel(3906250, GeoColor.SimpleColors.Copper));
            worldLayer.ZoomLevelSet.CustomZoomLevels.Add(GetZoomLevel(2953125, GeoColor.SimpleColors.LightRed));
            worldLayer.ZoomLevelSet.CustomZoomLevels.Add(GetZoomLevel(1500000, GeoColor.SimpleColors.LightYellow));
            worldLayer.ZoomLevelSet.CustomZoomLevels.Add(GetZoomLevel(750000, GeoColor.SimpleColors.LightBlue));
            worldLayer.ZoomLevelSet.CustomZoomLevels.Add(GetZoomLevel(375000, GeoColor.SimpleColors.LightOrange));
            worldLayer.ZoomLevelSet.CustomZoomLevels.Add(GetZoomLevel(50000, GeoColor.SimpleColors.PaleBlue));
            worldLayer.ZoomLevelSet.CustomZoomLevels.Add(GetZoomLevel(20000, GeoColor.SimpleColors.PaleGreen));
            worldLayer.ZoomLevelSet.CustomZoomLevels.Add(GetZoomLevel(10000, GeoColor.SimpleColors.PaleOrange));
            worldLayer.ZoomLevelSet.CustomZoomLevels.Add(GetZoomLevel(5000, GeoColor.SimpleColors.PaleYellow));
            worldLayer.ZoomLevelSet.CustomZoomLevels.Add(GetZoomLevel(1000, GeoColor.SimpleColors.LightBlue));
            worldLayer.ZoomLevelSet.CustomZoomLevels.Add(GetZoomLevel(100, GeoColor.SimpleColors.LightGreen));
            worldLayer.ZoomLevelSet.CustomZoomLevels.Add(GetZoomLevel(10, GeoColor.SimpleColors.LightOrange));
            worldLayer.ZoomLevelSet.CustomZoomLevels.Add(GetZoomLevel(1, GeoColor.SimpleColors.LightRed));           

 
The map will snap to its zoomLevels, which means if the ZoomLevelSet I synchronized to map has only 2 zoomLevels, on the map you can only zoom in/out between the 2 scales. So if you want to zoom in by a factor, you need to add every scales to the customZoomLevelSet.
 
Hope that helps! Let me know if you have more issues.
 
Thanks,
 
Ben 

1035-CustomZoomLevelSet.zip (10.6 KB)

ok, I have a question about this then. If I set 20 custom zoom levels for my "worldLayer", what happens when I set another 20 zoom levels for my "statesLayer"  
  
 Are those 20 layers specific to the layer, the Overlay or the Map? My understanding is the would be applicable to the map itself and not the individual layers. so if I had 20 layers, I would only be able to specify a single custom zoom level for each one ???

Jeremy, 
  
 Not exactly right. Here ZoomLevelSet on the layer only affects to the layer rendering not the map. The client zoom level only affects the navigation by the user such as zoommin, out and the zoom bar slider.  
  
 Layer’s zoom level set is a common object which is used by all of own products such as web, desktop and silverlight. Web Edition is a little special that it auto snaps to its closest zoom level when it renders. But in Service and Desktop, they can zoom in by percentage which will see exactly the style setting on the custom zoom level. So here is the difference. 
  
 In web edition it should be the way you said which is easier to use; but it’s harder to extend in the future. 
  
 Hope it make sense. 
  
 Thanks, 
 Howard