public IActionResult GetGoogleOptimalRoute([FromBody] MapOtimizedRouteRequest optimalRouteRequest) { if (optimalRouteRequest.Markers.Count() > 1) { if (optimalRouteRequest.Markers.Count() < 11) { var markers = markerService.MarkersBeforeRouteWork(optimalRouteRequest.Markers); optimalRouteRequest.Markers = markers; var response = routeLegService.GetGoogleOptimalRoute(optimalRouteRequest); markerService.UpdateMarkers(response.Markers); return(Json(new { success = true, otimizedRoute = response })); } else { return(Json(new { success = false, msg = "Maximum number of route points - 10. You can not build a route." })); } } else { return(Json(new { success = false, msg = "To build a route must be at least 2 points" })); } }
public MapOtimizedRouteResponce GetGoogleOptimalRoute(MapOtimizedRouteRequest optimalRouteRequest) { var startPoint = optimalRouteRequest.Markers.FirstOrDefault(marker => marker.MarkerType == MarkerType.StartPoint)?.Point; var endPoint = optimalRouteRequest.Markers.FirstOrDefault(marker => marker.MarkerType == MarkerType.EndPoint)?.Point; var wayPoints = optimalRouteRequest.Markers.Where(marker => marker.MarkerType == MarkerType.WayPoint).Select(x => x.Point); string options = "&departure_time=now"; options += "&traffic_model=" + optimalRouteRequest.OptimalRouteOption.ToString(); var apiResponce = googleApi.GetGoogleOptimalRoute(startPoint, endPoint, wayPoints, options); var markers = MarkerService.MarkersWaypointsReOrder(optimalRouteRequest.Markers, apiResponce.WaypointOrder.ToList()).OrderBy(x => x.Index).ToArray(); var legs = apiResponce.Legs; for (int i = 0; i < markers.Count() - 1; i++) { legs[i].StartPoint = markers[i].PointId; legs[i].EndPoint = markers[i + 1].PointId; } return(new MapOtimizedRouteResponce() { Legs = legs, Markers = markers, Polyline = apiResponce.Polyline }); }