ThinkGeo.com    |     Documentation    |     Premium Support

Add a tool to make a drag zoom like with shift key

 Hi all,


I wanted to know if it is possible to add a tool to make drag zoom like when holding the shift key ?


As we click on the tool "Draw circle" and then draw the shape on the map, we would click on a tool "Drag zoom" and then draw the zone we want to zoom to on the map.


Because shift + drag needs to know that this possibility exists and the user has to remember it which is not always the case !


Any ideas ?


Thanks



Gautier, 
  
  I understand very well your requirement and I can see how usefull it would be to have the map in a track zoomin mode so that the user can track zoom in on the map without having to hold the shift key. While I know how to do that in other Map Suite editions, I am not sure how to implement that in the Web edition. I will get someone from the Web developement team to assist on that. You should have the answer by tomorrow morning. Thank you for your idea.

Hi Gautier,


By setting Map.Tools.MouseMapTool.TrackZoomMaskType, we can handle 'track zoom in' in different ways. In your scenario, you should set TrackZoomMaskType as below:
 
Map1.MapTools.MouseMapTool.TrackZoomMaskType = TrackZoomMaskType.None;
Regards,
 
Ivan

OK thanks a lot for this, I put your code on the click event of a button and this works great ! 
  
 In addition, is there an event fired when the drag zoom end ? I would like to go back to TrackZoomMaskType.Ctrl when the user has made his zoom so that normal drag goes back to map pan 
  
 Thank you. 


And another question: is there a client side equivalent ? like for drawing a circle with the javascript: “Map1.SetDrawMode(‘Circle’);” 
  
 A kind of “Map1.SetTrackZoomMaskType(‘None’);” ? 
  
 Thanks

Gautier,


 Before you get the full answers on your two questions from Ivan, I can offer you some idea on how to go back to TrackZoomMaskType.Ctrl after the user has made his track zoom in so that the user can keep panning normally. You can use the ExtentChanged event of the map and do the checking there. This is a partial solution and we will see from Ivan for the exact solution for getting specifically the event at the end of track zooming in.


 



protected void Map1_ExtentChanged(object sender, ExtentChangedEventArgs e)
{
    if (Map1.MapTools.MouseMapTool.TrackZoomMaskType == TrackZoomMaskType.None)
    {
        Map1.MapTools.MouseMapTool.TrackZoomMaskType = TrackZoomMaskType.Ctrl;
    }
}


Hi Gautier,


Currently I didn't find any events fired when the drag zoom end in OpenLayers' source code. Here I provided some code snippet which demonstrates how to midify and restore track zoom mode on client side, please check attachment "T9114_CodeSnippet.txt" for more information.


Regards,


Ivan



T9114_CodeSnippet.txt (1.18 KB)

Great thank you very much for that ! 
 So in case someone would like to do like me I’m posting the code for what I wanted to do: 
  
 
<input type=“button” value=“Drag zoom” onclick=“changeZoomBoxKeyMask(OpenLayers.Handler.MOD_NONE);” />

<script>
var zoomControl;
var OnMapCreated = function (map) {
    zoomControl = map.getControlsByClass(“OpenLayers.Control.Navigation”)[0];
}

function changeZoomBoxKeyMask(mode) {
    if (zoomControl) {
        zoomControl.zoomBoxKeyMask = mode;
        zoomControl.draw();
        zoomControl.activate();
    }
}

var OnExtentChanged = function (map) {
    if (zoomControl && zoomControl.zoomBoxKeyMask == OpenLayers.Handler.MOD_NONE) {
        changeZoomBoxKeyMask(OpenLayers.Handler.MOD_CTRL);
    }
}
</script>
 
  


Hi Gautier, 
  
 Thanks for your sharing. Have a good day. 
  
 Regards, 
  
 Ivan