ThinkGeo.com    |     Documentation    |     Premium Support

Zooming makes the Map go blank

What is the setting (or methodology) that allows you to smoothly zoom the map in and out? 


When we use the mouse scroll wheel the map jumps to different zoom levels and blanks out for what seems like an interminal time period...very disconcerting to users.


Thanks.


bob



Hi Bob, 
  
 Sorry to tell you there is no zooming animation in desktop edition, but it was available in Wpf Desktop Edition. 
  
 Regards, 
 Edgar

I don’t know what “zooming animation” is, but how can I prevent the screen from going “blue” while it recalculates/redraws? 
  
 bob

Hi Bob,


'Zooming Animation' is where the map tiles seems to stretch a bit as you zoom in and out. For a demonstration check out maps.thinkgeo.com. As you zoom in and out you will see tiles that seem to get a bit fuzzy/out of focus before refreshing with the next ZoomLevel's data.


As Edgar mentioned we don't have the 'Zooming Animation' available with the Desktop Edition so you get the blue BackGroundOverlay displayed until the map completes the refresh. With the Desktop Edition we use what is called 'SingleTile' mode which means that all of the data is rendered in memory and then written to the screen all at once, in a 'single tile'. 



With other Editions of Map Suite such as WPF Desktop Edition, Web Edition, MVC Edition, we have a two tiles modes available: SingleTile and MultiTile. With MultiTile the map will draw small sections of the map, tile by tile, until all the data is rendered. You can see this occurring in the maps.thinkgeo.com sample as well.


I see three options.



        
  1. Switch to the WPF Desktop Edition which provides MultiTile mode and thus will load the data tile by tile and also supply the zooming animation.

  2.     
  3. Setup your DesktopEdition Map to use MultiThreaded mode. This is a much more complicated method requiring the addition of locks to your existing code.

  4.     
  5. Try and make the currrent rendering occur as quickly as possible. 

        Some ideas for this would include:

        Implementing a local TileCache for your Overlays - With a tile cache the map would first check to see if the necessary information for the Overlay is already available as a jpg or png and thus not need to read directly from the perhaps slower datasource.

        Review your ZoomLevels - 

        Are you loading too much data at a particular ZoomLevel? 

        Do you have requirments to show this data at this level or could you allow the user to zoom in further before displaying this data?

        What type of datasource are you reading? 

        If it is shapefile be sure you have spatial indexes built (.ids and .idx). If not you can use the ShapefileFeatureSource.BuildIndex() method to set those up.


Hope this helps!



When we zoom or pan we’re only changing the worldmapkitoverlay, other objects are not changing, just their size and location.  Can we throtle the zoom in some way?   
  
 For example, if the the mouse wheel is used to zoom, can we prevent it from zooming too much at a time?  If so, how? 
  
 bob

Bob, 
  
 Sorry to tell you that our API could not achieve this, however, in Desktop Edition, the map will not go blue when zooming, but goes blue in some part when panning, is it how it working on your side? I think you could take Ryan’s 3rd suggestion, it will make the performance better. 
  
 Regards, 
 Edgar

Is there a way to turn zooming in/out off?  What I’d like to do is give the user a gauge to click on that only zooms in descrete increments.  This would give the user a better experience as they wouldn’t have to wait indetermineately while the map went through muliple zooms… When this happens, like when a user clicks and clicks on the map only to discover that the map becomes unresponsive though successive zooms. 
  
 Thanks.  bob

Bob, I’m not sure I ever tried it but the CurrentScaleChanging event’s CurrentScaleChangingEventArgs has a “cancel” property that should let you cancel a zoom.  It seems to me there should be an easier way to stop zooming but nothing’s obvious as I look at the API documentation. 
  
 Regarding the screen going blue, we’ve been using MapSuite for several years and have never seen that.  A quick video clip might help the rest of us see what you’re seeing.  It sounds like there is a gap in the zoom level styling. 
  
 Allen

After thinking about this a little more, there would probably need to be a switch in the CurrentScaleChanging event to allow (when done by code) for the event to be processed otherwise the Cancel setting would never allow the map to zoom no matter if it was done by the user or in code.  Hopefully someone at ThinkGeo can point out that there is a better way.

Thank you.  I’ll give it a go. 
  
 Can you help me understand “gap in the zoom level styling” you mentioned.  I was told previously that there is no “animation” for the WinFormsMap control, so how can styling effect the zooming?  My boss is really on me to see a more responsive product… 
  
 bob

Bob, 
  
 There is no animation in WinForms, that I agree but when the map zooms in or out the old layer just stays put until the new layer is shown. 
  
 Anyway, let’s say you have just one layer and do something like this (on-the fly coding, not tested)… 
  
 ShapefileFeatureSource sf = new ShapefileFeatureSource(“myshapefile.shp”) 
 sf.ZoomLevelSet01.DefaultLineStyle = LineStyles.Line1 
 sf.ZoomLevelSet01.ApplyUntilZoomLevel=ZoomLevel10 
 sf.ZoomLevelSet15.DefaultLineStyle = LineStyles.Line2 
 sf.ZoomLevelSet15.ApplyUntilZoomLevel=ZoomLevel20 
  
 So if you zoom in or out and encounter zoom levels 11 through 14, there’s no style and the features don’t show…if I remember it’s because the default styles have colors with a 0 alpha or something which makes them not visible.  In the above example, if I had not assigned “Line1” an “Line2” I would not see anything.  The fact that you see something at times rules out issues like extent, SRID, etc. 
  
 That’s what I was talking about…may not have anything to do with your situation. 
  
 Allen

 


Hi Bob,



Thanks for your post, another way to skip the unnecessary zoomlevels is to overwrite MouseWheelCore in ExtentInterActiveOverlay. With the sample code below, one time mousewheel will jump 2 zoomlevels.




private void WpfMap_Loaded(object sender, RoutedEventArgs e)
        {
           …………..
            Map1.ExtentOverlay = new MyInteractiveOverlay();
          …………...
            Map1.Refresh();
        }

        class MyInteractiveOverlay : ExtentInteractiveOverlay
        {
            protected override InteractiveResult MouseWheelCore(InteractionArguments interactionArguments)
            {
                if (interactionArguments.MouseWheelDelta <= 0)
                {
                    interactionArguments.CurrentExtent.ScaleUp(50);
                }
                else
                {
                    interactionArguments.CurrentExtent.ScaleDown(50);
                }
                return base.MouseWheelCore(interactionArguments);
            }
        }



If any question, feel free to ask!


 


Johnny


 


 




Johnny, 
  
 Thanks for the above code, but can you please tell me how to no-op the MouseWheel?  I’d prefer that the user only zoom in/out with a scale bar that I’ve added to the bottom of the window.  It can then zoom in descreet amounts predetermined by my code. 
  
 I’ve tried changing your code above as follows: 
  
 interactionArguments.CurrentExtent.ScaleDown(0);  0%?? 
  
 but I get an error when it runs. 
  
 bob

 Hi Bob


 Thanks for your post, in “interactionArguments.CurrentExtent.ScaleDown(X);” X needs to be between 0 to 100, and “CurrentExtent.ScaleDown(50)” equals one time mouse wheel, “CurrentExtent.ScaleDown(0)” will make currentExtent=(0,0,0,0) , I guess this should be an error. About using scale bar, please check my anwser in another post gis.thinkgeo.com/Support/DiscussionForums/tabid/143/aff/21/aft/11095/afv/topic/Default.aspx 


 


Hope it helps.


 


Johnny