ThinkGeo.com    |     Documentation    |     Premium Support

Clicking Center of Pan/Zoom Bar crashes

If I click in the center (the little dot) of the pan/zoom bar, I get a NullReferenceException.  I'm not sure if I'm not setting a settintg correctly or something, but any help would be appreciated.  I'm using todays daily development build.


.Ryan.


 


Stacktrace:


Object reference not set to an instance of an object.

   at ThinkGeo.MapSuite.WpfDesktopEdition.LayerOverlay.GetBoundingBoxCore()

   at ThinkGeo.MapSuite.WpfDesktopEdition.Overlay.GetBoundingBox()

   at ThinkGeo.MapSuite.WpfDesktopEdition.PanZoomBarMapTool.x51d2c02950a243b6(Object xe0292b9ed559da7d, MouseButtonEventArgs xfbf34718e704c6bc)

   at System.Windows.RoutedEventArgs.InvokeHandler(Delegate handler, Object target)

   at System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)

   at System.Windows.UIElement.RaiseEventImpl(DependencyObject sender, RoutedEventArgs args)

   at System.Windows.UIElement.RaiseTrustedEvent(RoutedEventArgs args)

   at System.Windows.Input.InputManager.ProcessStagingArea()

   at System.Windows.Input.InputProviderSite.ReportInput(InputReport inputReport)

   at System.Windows.Interop.HwndMouseInputProvider.ReportInput(IntPtr hwnd, InputMode mode, Int32 timestamp, RawMouseActions actions, Int32 x, Int32 y, Int32 wheel)

   at System.Windows.Interop.HwndMouseInputProvider.FilterMessage(IntPtr hwnd, WindowMessage msg, IntPtr wParam, IntPtr lParam, Boolean& handled)

   at System.Windows.Interop.HwndSource.InputFilterMessage(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)

   at MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)

   at MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o)

   at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)

   at MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(Object source, Delegate method, Object args, Int32 numArgs, Delegate catchHandler)

 



Ryan, 
  
 I have tested that by using our HowDoI sample, it works properly. 
  
 Please provide a simple sample which can reproduce your problem, and then you could easy to figure out what happened. 
  
 Thanks, 
 James

Hi Ryan, 
  
 What kind of layers were in the layer overlay when you got this exception? 
 We’ve tried adding some layers to a layer overlay but had no luck of reproducing this issue. 
  
 Regards, 
 Tsui

Hi, 
  
 Sorry for the delay.  If it isn’t something you can reproduce right away, its probably something I’ve done in one of my layers.  I’ll try to track it down when I have a bit more time and let you know the results. 
  
 .Ryan.

Ryan, 
  
  Clicking on the center point of the Pan control makes the map get the full extent. It gets the full extent based on the bounding box of all the layers that you added to your map. If one of the layers is corrupted or has the bounding box invalid, this can create the problem. And by reading the errors description of your stacktrace, this could very well be the problem. But until we can the sample app from you will not know for sure. Thank you.

Hi Val, 
 I tracked it down to a LayerOverlay I created containing some WmsRasterLayers… I did not override the GetBoundingBoxCore in that layer… I just set it to return a new RectangleShape and it worked fine. 
  
 Thanks, 
 .Ryan.

Ryan, 
  
 It is glad to hear that it worked fine, if there are sitll any problems please let us know again, 
  
 Thanks, 
  
 Scott,

I am also having this problem. 
  
 I commented out all of the feature layers so there is only one overlay and it only has ThinkGeo map layers in it.   
 I am using WpfDesktopEdition.dll v4.5.0.0 dated 10/25/2010 19:32. 
  
 Thanks

Scott, 
  
 Can you use the latest version to try again, the latest version number is 4.5.158.0, I’m sure the latest version works fine, 
  
 Any more questions please let me know, 
  
 Thanks, 
  
 Scott,

I have downloaded and copied the files from 4.5.157.0 (the latest that I see) into my application directory (I’m not using strong naming) and still see the same behavior.

Scott, 
  
 Can you send your sample application with the dlls to us so that we can find out the real problem? According to my test, when I clicked the center of the pan zoom bar, it worked fine. I would like to ask you did you override GetBoundingBoxCore method for any layers? Also please when you send the sample to us please include the shape files together. 
  
 Thanks, 
  
 Scott,

I did override GetBoundingBoxCore for my layers, but I have commented out those layers (and the overlays containing them) for my test.  Only the layers containing the shapefiles from the World Map Kit are loaded.

Scott, 
  
 The latest version is 4.5.162.0 also I tested the 4.5.157.0, they both worked fine, I guessed maybe the problem is from your code, some of your shape files have the invalid bounding box, can you give us a simple sample with the shape files to us so that we can reproduce your problem properly and help you to resolve it? The reason is that this ability gets the full extent based on the bounding box of all the layers that you added to your map. If one of the layers is corrupted or has the bounding box invalid, this can create the problem.  
  
 Thanks, 
  
 Scott,

The shape files in question are from the ThinkGeo World Map Suite.  According to ThinkGeo, they are too big for downloading and are only available as a DVD distribution. 
  
 The code obviously has a bug.  Or the shapefile has a bug. 
  
 The shapefiles are yours. 
 The code is yours. 
  
 My only code is a bit of glue code that loads the shapefiles into an overlay and puts the wpf map control on the screen. 
  
 Can you generate a build that includes enough information in the exception to know which layer is causing the problem?

 Scott,


I see the reason what caused the crash problem in your application, you loaded the WorldMapKit dataset and clicked the full extent button on the PanZoomBar then it crashed, it that true?


If that I would like to ask you that did you use the WorldMapKitRenderLayer.cs in your application for loading and rendering the WorldMapKit layers? So you should add the following code to this code file so that the bounding box can be returned:


 



 public override bool HasBoundingBox
        {
            get
            {
                return true;
            }
        }
  Any more questions please let us know again,


Thanks,


Scott,



No, I’m using straight MultipleShapeFileFeatureLayer, loaded with  
 
layer = new MultipleShapeFileFeatureLayer(filePattern); 
 
  
 After I load all the layers into the overlay I validate that all the layers in all overlays have (HasBoundingBox == true) and all of them pass that test. 
  
 I have also checked (overlay.MapArguements != null) but that one fails for the main map overlay.

Hi Scott, 
  
 Would you like to let us know what pattern you were using when you reproduced this issue? 
 I just tried to reproduce this issue by using MultipleShapeFileFeatureLayer to load two shapefiles and then click the “full extent” button, and it worked out correctly. 
 Please let us know which file you were loading, so we can test it more precisely. 
  
 Regards, 
 Tsui