public static GMapRoute DrawRoute(GMapOverlay overlay, RouteList routeList, RouteGeometryCalculator geometryCalc = null) { List <PointLatLng> points; var baseLat = (double)routeList.GeographicGroups.FirstOrDefault().BaseLatitude.Value; var baseLon = (double)routeList.GeographicGroups.FirstOrDefault().BaseLongitude.Value; if (geometryCalc != null) { var address = routeList.GenerateHashPointsOfRoute(); StartProgress(address.Length); points = geometryCalc.GetGeometryOfRoute(address, UpdateProgress); CloseProgress(); } else { points = new List <PointLatLng>(); points.Add(new PointLatLng(baseLat, baseLon)); points.AddRange(routeList.Addresses.Select(x => x.Order.DeliveryPoint.GmapPoint)); points.Add(new PointLatLng(baseLat, baseLon)); } var route = new GMapRoute(points, routeList.Id.ToString()) { Stroke = new System.Drawing.Pen(System.Drawing.Color.Blue) { Width = 2, DashStyle = System.Drawing.Drawing2D.DashStyle.Solid } }; overlay.Routes.Add(route); return(route); }