ThinkGeo.com    |     Documentation    |     Premium Support

Limit ZoomLevels

Hello,


I've tried to simply limit the zoom levels from 20 to 6 for instance in the following mannner.


ShapeFileFeatureLayer worldLayer = new ShapeFileFeatureLayer(PATH)


 


worldLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level06;

 



worldLayer.ZoomLevelSet.ZoomLevel07.Scale = 0;


worldLayer.ZoomLevelSet.ZoomLevel07.ApplyUntilZoomLevel =


ApplyUntilZoomLevel.Level20;

But those commands don't do anything. By the way, I'm using a Google-Map overlay and a LayerOverlay containing my "WorlLayer" that it 's described above. I mean, this operation should be easy to realize isn't it ???




 Hello Patrick,


 
Thanks for your post, I think you have some misunderstanding about ApplyUntilZoomLevel property. This property allows you to apply the current ZoomLevel's styles across many ZoomLevels. For example, you may want to display roads as a thin line from ZoomLevel10 through ZoomLevel15. To accomplish this easily, you can set the correct styles on ZoomLevel10 and then set its ApplyUntilZoomLevel property to Level15. This will mean that Level10's style will be used until Level15. There is no need to set Level11, Level12, Level13 and so on.
 
So using ApplyUntilZoomLevel  won't help you ignore the zoomlevel 01-05, the right way is using the custom zoomlevel and only add 06-20 into it. Please check the code below:

                Map1.ZoomLevelSet.CustomZoomLevels.Add(new ZoomLevel(Map1.ZoomLevelSet.ZoomLevel06.Scale));
                Map1.ZoomLevelSet.CustomZoomLevels.Add(new ZoomLevel(Map1.ZoomLevelSet.ZoomLevel07.Scale));
.
.
.
.
//keep add zoomlevel until 20
                Map1.ZoomLevelSet.CustomZoomLevels.Add(new ZoomLevel(Map1.ZoomLevelSet.ZoomLevel20.Scale));

Let us know if you have any queries.
 
Regards,
 
Gary

Hello Gary, thank you for your answer.


I think you misunderstood my problem.


I'm not looking to apply different styles in different zoom levels. I'm putting some colours on some countries from level 01 to 20, so I don't need to "ignore" zoomlevels in a style point of view.


As mentioned, I'm coloring countries regarding with some specific values. What I need, it's to avoid the users to go to much in details on the map. A user shouldn't be able to go to zoomLevel 15 til 20, where he can see some streets for instance, because he will only need to see the countries.


So now, I'd like to know whether there is a way to physically "remove" the zoom levels from 15 to 20. I mean, when the user sees the scale on the left of the map, he should have only 14 possibilities of zoom and not 20 for instance.


As mentionend, I'm actually working with a Google Map overlay and a LayerOverlay containing my "World Layer".


Thank you for your quick reply.


 



Moreover, I looked at the web samples again, “Set zoomLevels less than 20”.  
  
 The code that I posted at first was similar to the one in the example isn’t it?: 
  
  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;   
  
 So, did I really misunderstand something because your comment and the web example are quite confusing… 
  
  


I noticed why I can’t simply limit hte number of zoom levels: it is related of the fact that I’m using a google Map layer. 
  
 Is there a way to limit the zoom levels on Google Map layer ?? 
  
 a part of my code: 
  
 World layer (contained in StaticOverlay): 
  
  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;   
  
   StaticOverlay.Layers.Add(WORLD_LAYER, worldLayer); 
  
 add of the overlays: 
  
    MyMap.CustomOverlays.Add(GoogleOverlay);   
    MyMap.CustomOverlays.Add(StaticOverlay); 
  
     MyMap.ZoomLevelSet = worldLayer.ZoomLevelSet; 
  
  
 and I also tried with the customZoomLevels but it seems that really, the issue is Google Overlay related 
  


Hello Patrick, 
  
 “So now, I’d like to know whether there is a way to physically “remove” the zoom levels from 15 to 20. I mean, when the user sees the scale on the left of the map, he should have only 14 possibilities of zoom and not 20 for instance.” 
  
 --> The code I provided above is doing the ‘remove’ job, for example, default zoomlevels have 01-20, so you use customzoomlevel and only added 01-14 into it, so it won’t have 15-20, I think this is physically remove. 
  
 Also, google map working with the sample zoomlevels in the map, so if you tried my code, it should working for google map too. 
  
 Regards, 
  
 Gary

Dear Gary,


I'm maintainig that your code works with WorldMapKitWmsWebOverlay but NOT with google map.


Here is the code that "should" work in accordance with your last post.




 //Adds the Google Map as an overlay

               GoogleOverlay google = new GoogleOverlay("Google Map");

               //google.JavaScriptLibraryUri = new Uri(ConfigurationManager.AppSettings["GoogleUri"]);


               //google.JavaScriptLibraryUri = new Uri(@"<a href="maps.google.com/maps?file=api&amp;v=2&amp;key=ABQIAAAAoxK_HcqphMsnUQHEwLwHlRSavkNJi0NVTgm4UDidoiIU5dUJpRQW88FufPCp0aTPraxZgZFAIUHn3Q">maps.google.com/maps?file=ap...gZFAIUHn3Q</a>");                   

               google.GoogleMapType = GoogleMapType.Normal;


               Map1.CustomOverlays.Add(google);


     Map1.ZoomLevelSet.CustomZoomLevels.Add(new ZoomLevel(Map1.ZoomLevelSet.ZoomLevel06.Scale));

               Map1.ZoomLevelSet.CustomZoomLevels.Add(new ZoomLevel(Map1.ZoomLevelSet.ZoomLevel07.Scale));

 


make a simple test and tell me if it works.


On my side IT DOESN'T WORK.


So please, I kindly ask you to provide me THE CODE of a google map overlay with limited zooms (let's say 5).


Thank you very much.


 



Hi Patrick, 
  
 You can refer to the post gis.thinkgeo.com/Support/DiscussionForums/tabid/143/aff/12/aft/10517/afv/topic/Default.aspx, which is about how to set 22 zoomlevels for a google map overlay, it should also work for 5 zoomlevels. 
  
 Hope it helps, 
  
 Edgar

 Hello Patrick,


 
Thanks for Edgar's link, the key is using this javascript when you work with google overlay.

<script type="text/javascript">
        var OnMapCreated = function (map) {
            var layer = map.getLayer("Google Map");// id of the google overlay

            var name = layer.name;
            var options = layer.options;
            options.numZoomLevels = 5;

            var newLayer = new OpenLayers.Layer.Google(name, options);

            map.removeLayer(layer);
            map.addLayer(layer);
        }
   </script>

Let us know if you still have problem.
 
Regards,
 
Gary

Could you provide me as well how this function is called in the control "Map" please?

Hello Patrick, 
  
 Because we are using javascript to call the google map server, so we are using openlayer to control the googlelayer(google overlay) display in the control, above is the JavaScript code to change the connect zoombar. 
  
 This code can only be used in the aspx page and can not called by Map. 
  
 Regards, 
  
 Gary