ThinkGeo.com    |     Documentation    |     Premium Support

OpenStreetMapLayer and BingMapsLayer throwing exceptions

Hello,



I would like to report two different issues in OpenStreetMapLayer and BingMapsLayer implementations (tested in 7.0.0.42).



OpenStreetMap: 

 - Throws an unhandled argument exception -> index out of bounds. (DrawExceptionMode.Draw does not catch it).

 To reproduce:

     1)  Create a OpenStreetMapLayer with 3 customserverURIs 

          ( I used a.tile.openstreetmap.org/b.tile.openstreetmap.org/ and c.tile.openstreetmap.org/ )

     2)  Add it to a WpfMap, with at least 20 zoom Levels.

     3) Zoom In up to the highest zoom level. 

     4) The control crashes when we reach zoom level number 16 and beyond.

From my debugging, it seems that the logic that calculates which CustomServerURI to use calculates a negative index past this bound.





BingMapsLayer:

- Throws an unhandled exception when we try to use the layer and we do not supply the layer with an ApplicationID (or an invalid one).

      -> the exception comes from Bing servers returning a HTTP 401/403 error.

I would have expected the exception to be thrown in the DrawExceptionEvent and that the control would not crash. GoogleMapsLayer already works like that.



Thanks.



David




Hi David, 
  
 Thanks for your post, We have fixed the issue of OpenStreetMapLayer. Please try it on latest version 7.0.45.0 or 7.0.0.45, and try it again? 
  
 About bingmap, it has a difference with googlemap, the bingmap has one more process in layer.open, which is getting a xml from bing server with the clientid, if the clientid is wrong, then the exception will be thrown. Would you please try the following code to walk around? 
  
         private void WpfMap_Loaded(object sender, RoutedEventArgs e) 
         { 
             Map1.MapUnit = GeographyUnit.Meter; 
             MyBingMapsLayer bingmapLayer = new MyBingMapsLayer("…"); 
             bingmapLayer.DrawingExceptionMode = DrawingExceptionMode.DrawException; 
             bingmapLayer.DrawingException += new EventHandler<DrawingExceptionLayerEventArgs>(bingmapLayer_DrawingException); 
             LayerOverlay overlay = new LayerOverlay(); 
             overlay.Layers.Add(bingmapLayer); 
             Map1.Overlays.Add(overlay); 
             Map1.Refresh(); 
         } 
  
         void bingmapLayer_DrawingException(object sender, DrawingExceptionLayerEventArgs e) 
         { } 
  
         public class MyBingMapsLayer : BingMapsLayer 
         { 
             public MyBingMapsLayer(string applicationId) 
                 : base(applicationId) 
             { } 
             protected override void OpenCore() 
             { 
                 try 
                 { base.OpenCore(); } 
                 catch (Exception ex) 
                 { } 
             } 
         } 
  
 Hope it helps 
  
 Summer

Hello Summer,



I’ve implemented the new pattern with our use of BingMapsLayer, it works great.



For now, we do not see the 7.0.0.45 in our space. I will try later.



Thanks,



David


Hi David, 
  
 Great to hear it helped, if you have any more question, please feel free to let us know. 
  
 Best Regards 
  
 Summer