ThinkGeo.com    |     Documentation    |     Premium Support

NullReferenceException when refreshing RoutingLayer

I've configured a RoutingLayer like so:


                RoutingLayer routingLayer = new RoutingLayer();

                routingLayer.Name = "RoutingLayer";

                LayerOverlay routingOverlay = new LayerOverlay();

                routingOverlay.TileType = TileType.SingleTile;

                routingOverlay.Name = "RoutingOverlay";

                routingOverlay.Layers.Add(routingLayer.Name, routingLayer);

                this.mapUI.Overlays.Add(routingOverlay.Name, routingOverlay);


Then, I generate a route, and add its path using this logic:


                foreach (MultilineShape path in paths)

                {

                    routingLayer.Routes.Add(path);

                }



                ((LayerOverlay)this.mapUI.Overlays["RoutingOverlay"]).Refresh();


But when I call the Refresh method above I get a NullReferenceException. I just use the RoutingLayer to add the route path to its Routes collection.


What I want to do with that is refresh the overlay in order to show the route path on the map. If I remove this bold line, the route path shows when I interect with the map, without problems.



Hi Gustavo: 



This problem is because when you add the overlay to the Overlays collection, the overlay is not added in the logic tree immediately. So it fails when you call overlay.Refresh(); there are two options for you to solve this problem. 



1: directly call the mapUI.Refresh() method, this refreshes all elements in the map. 



2: call the mapUI.Refresh(mapUI.Overlays["RoutingOverlay"]) method which only refreshes the overlay that got passed into the method, but you have to use the latest release package, for we fixed a bug here in the past few days. 



Thanks and feel free to let us know if you have any other questions. 

Howard



Thank you Howard. It solved the issue.

Hi Gustavo, 
  
 You are welcome; please feel free to let me know if you have more queries. 
  
 Thanks, 
 Howard