ThinkGeo.com    |     Documentation    |     Premium Support

Restrict Zoom Levels

I’ve looked at the example Restrict ZoomLevels to less Than 20 to get a starting point of 

worldLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle = AreaStyles.CreateSimpleAreaStyle(GeoColor.SimpleColors.Transparent, GeoColor.FromArgb(100, GeoColor.SimpleColors.Green));

worldLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level05;

worldLayer.ZoomLevelSet.ZoomLevel06.Scale = 0;

worldLayer.ZoomLevelSet.ZoomLevel06.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;



However, when I try to modify the range of zooming to not include level 1



worldLayer.ZoomLevelSet.ZoomLevel01.Scale = 0;

worldLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level02;

worldLayer.ZoomLevelSet.ZoomLevel03.DefaultAreaStyle = AreaStyles.CreateSimpleAreaStyle(GeoColor.SimpleColors.Transparent, GeoColor.FromArgb(100, GeoColor.SimpleColors.Green));

worldLayer.ZoomLevelSet.ZoomLevel03.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level05;

worldLayer.ZoomLevelSet.ZoomLevel06.Scale = 0;

worldLayer.ZoomLevelSet.ZoomLevel06.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;



I receive System.ArgumentOutOfRangeException: Index was out of range. Must be non-negative and less than the size of the collection. Parameter name: index



Is there a different way to go about excluding the first levels of zooming?



Thanks,

Sarah



Hi Sarah,



I tested your code in my end but it works fine without exception. In the sample, the shapes are limited at only zoom 3 to 5, the map is empty beyond this range. The version I am referring is 9.0.0.64 and the latest dlls. Would you please verify it? I attached a test video, please check it.



screencast.com/t/IcaoH0Sh



Thanks,

Troy


Hi Troy,



The dlls I am using are version 9.0.69.0.



I noticed your code was different from the sample in that you never set map.ZoomLevelSet = worldLayer.ZoomLevelSet. When I remove this then I do not receive the exception that I was experiencing earlier. I also noticed that the zoom bar in your video seems to stay long, while the zoom bar in the sample is shortened. Although not a large issue, it would be nicer to have the shortened zoom bar.



It seems that each layer must have its ZoomLevelSet modified. Is there any way to do it for the whole map? How do you modify the ZoomLevelSet of something like WorkMapKitWmsWebOverlay or BingMapsOverlay which don’t expose layers?



Thanks,

Sarah

I use BingMapsOverlay as my background. When I have only that overlay and use



map.ZoomLevelSet.ZoomLevel01.Scale = 0;

map.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level05;



nothing seems to happen.



If I add empty LayerOverlays to the map then all the zoom levels are indicated as restricted by the map being covered with pink squares with Xs, not just 1-5. If I alter the restriction to not show x-20, then the correct zoom levels are covered in pink squares. If I alter the restriction to not show 1-x the pink squares are at all levels. In fact, if I alter to not show x-y it looks to be the same as not showing x-20.



My real issue is without zoom restriction at zoom level 1, the map shows that pink square and this is what I am trying to avoid having my users see. But it looks like the zoom levels that are not supposed to be shown are getting that pink square anyway. And it doesn’t seems like the map’s ZoomLevelSet works the same as it does with layers.

Hi Sarah, 
  
 If you want to make the “ZoomLevel” bar short, you can customize “ZoomLevelSet” with your scales as following codes, the “ZoomLevelBar” is related with “ZoomLevelSet”: 
  
         @{
            ZoomLevelSet worldLayerSet = null;
            Html.ThinkGeo().Map("Map1", new System.Web.UI.WebControls.Unit(100, System.Web.UI.WebControls.UnitType.Percentage), 510)
              .MapBackground(new BackgroundLayer(new GeoSolidBrush(GeoColor.FromHtml("#E5E3DF"))))
              .MapUnit(GeographyUnit.DecimalDegree)
              .CurrentExtent(-125, 72, 50, -46)
              .CustomOverlays(overlay =>
              {
                  overlay.WorldMapKitWmsWebOverlay();
                  ShapeFileFeatureLayer worldLayer = new ShapeFileFeatureLayer(Server.MapPath("~/App_Data/cntry02.shp"));
                  worldLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle = AreaStyles.CreateSimpleAreaStyle(GeoColor.SimpleColors.Transparent, GeoColor.FromArgb(100, GeoColor.SimpleColors.Green));
                  worldLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level05;
                  worldLayer.ZoomLevelSet.ZoomLevel06.Scale = 0;
                  worldLayer.ZoomLevelSet.ZoomLevel06.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;

                  overlay.LayerOverlay().IsBaseOverlay(false).Layer(worldLayer);

                  worldLayerSet = new ZoomLevelSet();
                  worldLayerSet.CustomZoomLevels.Add(new ZoomLevel(590591790.0));
                  worldLayerSet.CustomZoomLevels.Add(new ZoomLevel(18455993.4375));
              })
              .ZoomLevelSet(worldLayerSet)
              .Render();
        }
 
 
  
 But about the pink tile issues, I can’t reproduce them, can you send a simple sample to me? 
  
 Thanks,

I’ve made a sample app and taken two screenshots of the offending pink square behavior.



Thanks,

Sarah

ZoomRestrictionSample.zip (1.98 MB)

The screenshots.





Hi Sarah,  



Thanks for your sample, that’s helpful for us to go on work for your issue. 



Here I have some questions about referenced dlls. 



1. I have installed WebGrease 1.6.0 from MS and Newtonsoft.Json v7.0.1 from Newton-King. If that’s not correct version please let me know. 



2. When I tried install Antlr3.Runtime, I can only find Antlr3 Portable v3.5.0.3 from Ben Abelshausen, which don’t support .net framework 4.5. I am using NuGet to get them, please let me know whether this reference is necessary. 



3. It looks I missed all MVC related dlls, I want to know your detail MVC edition so I can install it.



Regards, 



Don

When I download the attached sample I install Microsoft ASP.NET MVC version 5.2.3 and Microsoft ASP.NET Web Optimization Framework version 1.1.3 from Nuget and the sample successfully builds and runs. 
  
 I was trying to make the sample small enough to attach it here in the forum. Thanks for working with it. 
  
 -Sarah

Hi Sarah, 
  
 Thanks for let me know the detail. 
  
 I am sorry I need some time to prepare the environment, today I hadn’t install the MVC version 5 succeed, I will keep work for it. 
  
 Regards, 
  
 Don