ThinkGeo.com    |     Documentation    |     Premium Support

Using ExtentOverlay for pannng

Hi,


I tried to follow the "Zoom In To Point" project in the Code Community site.


I wanted the map to move so that the clicked point will be in the center but with no change in zoom


It seems to me that all i shoud do is modify one line of code in the ZoomInToPointInteractiveOverlay class:


interactiveResult.NewCurrentExtent = scaledDownRectangleShape;


becomes


interactiveResult.NewCurrentExtent = newExtent;


But this does not work and the map does not move at all.


Am i doing anything wrong?


 



Ofer,


I think there was a hidden bug in that sample, we should use clone deep when using the interactionArguments.CurrentExtent.


Try following code:

protected override InteractiveResult MouseClickCore(InteractionArguments interactionArguments)
        {
            InteractiveResult interactiveResult = new InteractiveResult();
 
            //Calculates the offset in X and Y to center the map.
            PointShape centerPointShape = interactionArguments.CurrentExtent.GetCenterPoint();
            PointShape newPointShape = new PointShape(interactionArguments.WorldX, interactionArguments.WorldY);
            double XOffset = newPointShape.X - centerPointShape.X;
            double YOffset = newPointShape.Y - centerPointShape.Y;
            RectangleShape newExtent = (RectangleShape)interactionArguments.CurrentExtent.CloneDeep();
            newExtent.TranslateByOffset(XOffset, YOffset);
 
            //Scales down the offset rectangle to have it set as the new extent of the map for zooming in.
            RectangleShape scaledDownRectangleShape = RectangleShape.ScaleDown(newExtent, 85).GetBoundingBox();
            
            //interactiveResult.NewCurrentExtent = scaledDownRectangleShape; 
            interactiveResult.NewCurrentExtent = newExtent;
 
            interactiveResult.ProcessOtherOverlays = ProcessOtherOverlaysMode.DoNotProcessOtherOverlays;
            interactiveResult.DrawThisOverlay = InteractiveOverlayDrawType.Draw;
            return interactiveResult;
        }

 
Any more questions just feel free to let me know.
 
Thanks.
 
Yale