ThinkGeo.com    |     Documentation    |     Premium Support

Center and Zoom with MouseDoubleClick

     Hi,


 I'm trying to modify the MouseDoubleClick behaivour to first center at the mouse position and then Zoom In. I tryed with this code



 


Private Sub WpfMap1_MouseDoubleClick(ByVal sender As Object, ByVal e As System.Windows.Input.MouseButtonEventArgs) Handles WpfMap1.MouseDoubleClick


 Dim p As System.Windows.Point = e.GetPosition(Me)


 WpfMap1.CenterAt(p.X, p.Y)


  End Sub


 


 


 


 But it seems that it first zoom and then center at the wrong position.


 By the way, what's the difference between WpfMap1_MouseDoubleClick(ByVal sender As Object, ByVal e As System.Windows.Input.MouseButtonEventArgs) and WpfMap1_MapDoubleClick(ByVal sender As Object, ByVal e As ThinkGeo.MapSuite.WpfDesktopEdition.MapClickWpfMapEventArgs) events? Formers executes earlier, but appart of that?


 



Carlos, 
  
 WpfMap1.CenterAt() need to pass in the position with world coordinate, however it seems you pass in the one with screen coordinate, you need to convert it. 
  
 Thanks, 
 James

There is an overload with screen coors.... 



Carlos



 Carlos,


I have made a sample to test CenterAt, it works properly. Everytime when I double click on the map, i will set red cross to center of map. I double click on Greenland, and then the GreenLand is show upon the red cross, and then I click Brazil, Brazil show upon the red cross.


private void WpfMap_Loaded(object sender, RoutedEventArgs e)
        {
            Map1.MouseDoubleClick += new System.Windows.Input.MouseButtonEventHandler(Map1_MouseDoubleClick);
            Map1.MapUnit = GeographyUnit.DecimalDegree;
            Map1.CurrentExtent = new RectangleShape(-155.733, 95.60, 104.42, -81.9);
            WorldMapKitWmsWpfOverlay worldOverlay = new WorldMapKitWmsWpfOverlay();
            Map1.Overlays.Add("WMK", worldOverlay);

            InMemoryFeatureLayer layer = new InMemoryFeatureLayer();
            layer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
            layer.ZoomLevelSet.ZoomLevel01.DefaultPointStyle = new PointStyle(PointSymbolType.Cross, new GeoSolidBrush(GeoColor.SimpleColors.Red), 20);
            LayerOverlay overlay = new LayerOverlay();
            overlay.Layers.Add("CenterPointLayer", layer);
            Map1.Overlays.Add("CenterPointOverlay", overlay);
            Map1.Refresh();
        }

        void Map1_MouseDoubleClick(object sender, System.Windows.Input.MouseButtonEventArgs e)
        {
            System.Windows.Point p = e.GetPosition(this);
            Map1.CenterAt((float)p.X, (float)p.Y);

            LayerOverlay overlay = Map1.Overlays["CenterPointOverlay"] as LayerOverlay;
            InMemoryFeatureLayer layer = overlay.Layers["CenterPointLayer"] as InMemoryFeatureLayer;
            Feature centerPoint = new Feature(Map1.CurrentExtent.GetCenterPoint());
            layer.InternalFeatures.Clear();
            layer.InternalFeatures.Add(centerPoint);

            Map1.Refresh();
        }

Thanks,


James



Hi James, 
  
  At least with 6.0.4 dlls your code detects properly where you double click, but does not center as happen to me before. Look at this video showing it: dl.dropbox.com/u/6792052/CenterAndZoom.mov 
  
  Carlos

Carlos, 
  
 So you mean the 6.0.4 is working, however the previous version didn’t, If that is, I think it’s maybe an old issue that we have already fixed before. 
  
 Thanks, 
 James

Hi James, 
  
  Sorry, I was not clear, I meant that 6.0.4 fails as previous versions did as well. Look at the linked video and you will see that the point where user double clicks is correctly detected (and a + mark is placed), but then centerAt is done in other place. I used the same code you posted before. 
  
 By the way, what’s the difference between WpfMap1_MouseDoubleClick(ByVal sender As Object, ByVal e As System.Windows.Input.MouseButtonEventArgs) and WpfMap1_MapDoubleClick(ByVal sender As Object, ByVal e As ThinkGeo.MapSuite.WpfDesktopEdition.MapClickWpfMapEventArgs) events? Formers executes earlier, but appart of that? 
  
 Carlos

Carlos, 
  
 Yes, when I use 6.0.4 and try my sample again, the result is wrong, I have reported this issue to our development team. It will be fixed next week. 
  
 Thanks, 
 James