ThinkGeo.com    |     Documentation    |     Premium Support

Maintain Current Extent and Scale level

Hello,


I have three pages and each contains Thinkgeo map. If user changed the map extent and scale in one page and goto another page then that page map will be displayed at same extent and scale that user left in previous map page. For that I have used ExtentChanged event, but problem is that each time page is post backed and consumes lot of time. So please give alternate solution for maintaining currentextent and scale level. I have also used of javascript but in that I am not able to get current scale level. If possible please guid me how to get map's current scale level. 


Thanks,


Badal Patel



 Hi, Badal



There is one OnClientExtentChanged client-side event of Map Control which is maybe helpful to you. If you want to use that, first off you need to register the OnClientExtentChanged event on the Map Control like the code below:



                Map1.OnClientExtentChanged = "OnClientExtentChanged"; // the function name you can specifiy to what you want



And the define the function OnClientExtentChanged on the client-side, like the code below:



        function OnClientExtentChanged(e) {

            var map = e.object; // or var map = this.map;

            var zoom = map.zoom; // or map.getZoom();

            var zoom1 = map.getZoom();

            var currentExtent = map.getExtent();

            var zoom2 = map.getZoomForExtent(currentExtent);

        }



So you can get the CurrentExtent and ZoomLevels and then you just need to synchronise between pages using hidden value or other technologies.



Please let us know if you have any questions.



Thanks,



Khalil

 



Thanks Khalil, 
  
 Well i have store the extent and scale in my user control Unload events so everytime page is changed unload event will fire and will save the state…I will try to put it in client side later cause i am  on strict deadline ;) 
  
 Khalil, i am facing one more issue in this extent and scale.Let me explain that 
 I have one toggle button which is toggling the map between thinkgeo and google map (thinkgeo google layer) 
 But each time the i toggle between these maps my scale seems to be different and cause of that the zoom scale is not maintained. 
 Ex. 
 Suppose, right now the thinkgeo map is shown and we are at zoom level 20 (maximum zoom level), i debug and found that scale level is : 1126.4644432067871 
 Now i switch the map to google by adding google layer of thinkgeo on map. The map remains at zoom level 20 cause i am assigning map.currentscale=1126.4644432067871 so map stays at current scale, which is fine. 
 Now when i go to the google to thinkgeo at that time i am getting the current scale = 1128.5000425316878 which is different and cause of this the map is showing at zoomlevel 19 in thinkgeo and hence scale is not maintained… 
  
 Can u throw any light here for what should i do to avoid this? 
  
 Thank u very much 
  
  
  


Hi, Badal 
  
 Thanks for your feedback. 
  
 I think your problem is caused by that the Google Layer has a different max resolution and DPI with your thinkgeo map. Here is a workaround for you, please refer to the codes below: 
         var OnMapCreating = function(map) { 
             OpenLayers.DOTS_PER_INCH = 96; 
  
             OpenLayers.Layer.SphericalMercator.initMercatorParameters = function() { 
                 // set up properties for Mercator - assume EPSG:900913 
                 this.RESOLUTIONS = []; 
                 var maxResolution = 156260.66005674357; 
                 for (var zoom = 0; zoom <= this.MAX_ZOOM_LEVEL; ++zoom) { 
                     this.RESOLUTIONS[zoom] = maxResolution / Math.pow(2, zoom); 
                 } 
                 this.units = "m"; 
                 this.projection = "EPSG:900913"; 
             } 
         } 
  
 Thanks,  
  
 Khalil

Wow, 
 works like a charm… 
  
 Thanks u very much, Khalil

Badal, 
  
 Sounds great that it works well. You are welcome. 
  
 Please let me know if you have any questions. 
  
 Thanks, 
  
 Khalil