public virtual void RecalculatePlanedDistance(RouteGeometryCalculator distanceCalculator) { if (WayBillDocumentItems.Count == 0) { PlanedDistance = 0; } else { PlanedDistance = distanceCalculator.GetRouteDistance(HashPointsOfRoute.ToArray()) / 1000m; } }
protected void OnButtonRecalculateMileageClicked(object sender, EventArgs e) { logger.Info("Рассчет длинны маршрута..."); RouteGeometryCalculator routeCalculator = new RouteGeometryCalculator(DistanceProvider.Osrm); var points = new List <long> { CachedDistance.BaseHash }; #region если нет координат хотя бы у одной точки доставки bool hasError = false; string ErMsg = "Пересчёт километража невозможен, т.к. не найдены координаты для следующих точек доставки:\n"; foreach (RouteListItem address in Entity.Addresses.Where(p => p.Order.DeliveryPoint.Latitude == null || p.Order.DeliveryPoint.Longitude == null)) { hasError = true; ErMsg += String.Format("\tЗаказ №{0} - {1}\n", address.Order.Id, address.Order.DeliveryPoint.ShortAddress); } ErMsg += "Перейдите в указанные точки доставки и добавьте (проверьте) их координаты."; if (hasError) { MessageDialogHelper.RunWarningDialog(ErMsg); return; } #endregion foreach (RouteListItem address in Entity.Addresses.OrderBy(x => x.StatusLastUpdate)) { if (address.Status == RouteListItemStatus.Completed) { points.Add(address.Order.DeliveryPoint.СoordinatesHash); } } points.Add(CachedDistance.BaseHash); var distance = (decimal)routeCalculator.GetRouteDistance(points.ToArray()); Entity.RecalculatedDistance = distance / 1000; logger.Info("Ок."); }