public async Task <IActionResult> Bus([FromQuery] CoordinatesBindingModel cbm) { if (!ModelState.IsValid) { return(BadRequest(new ApiError(ModelState))); } int cityId = 0; string startPlace = cbm.StartingPoint; string endPlace = cbm.DestinationPoint; cbm.StartingPoint = await busDirectionsService.GetLatLng(cbm.StartingPoint); cbm.DestinationPoint = await busDirectionsService.GetLatLng(cbm.DestinationPoint); Coordinates coordinates = mapper.Map <Coordinates>(cbm); if (coordinates.StartingPoint.Longitude > 27) { cityId = 1; } else { cityId = 2; } var directions = await busDirectionsService.BusAlgorithm(coordinates, startPlace, endPlace, cityId); List <BusDirections[]> busDirections = new List <BusDirections[]>(); foreach (var item in directions) { busDirections.Add(item.ToArray()); } Collection <BusDirections[]> collection = new Collection <BusDirections[]>() { Self = LinkGenerator.ToForm(RouteNames.BusQuery, new { startingPoint = startPlace, destinationPoint = endPlace }, LinkGenerator.GetMethod, Form.QueryRelation), Value = busDirections.ToArray() }; return(Ok(collection)); }
public async Task <IActionResult> Cycle([FromQuery] CoordinatesBindingModel cbm) { if (!ModelState.IsValid) { return(BadRequest(new ApiError(ModelState))); } cbm.StartingPoint = await bicycleDirectionsService.GetLatLng(cbm.StartingPoint); cbm.DestinationPoint = await bicycleDirectionsService.GetLatLng(cbm.DestinationPoint); //TODO : think if this should be done in service Coordinates coordinates = mapper.Map <Coordinates>(cbm); BicycleStopViewModel nearestBicycleStation = await bicycleDirectionsService.FindNEarestBicycleStop(coordinates.StartingPoint); BicycleStopViewModel nearestBicycleStationToLocation = await bicycleDirectionsService.FindNEarestBicycleStop(coordinates.EndPoint); Directions directionsToNearestStation = await bicycleDirectionsService.GetDirectionsByFoot(coordinates.StartingPoint, nearestBicycleStation.LatLng); Directions directionsBetweenStations = await bicycleDirectionsService.GetDirectionsBicycle(nearestBicycleStation.LatLng, nearestBicycleStationToLocation.LatLng); Directions directionsToTheEnd = await bicycleDirectionsService.GetDirectionsByFoot(nearestBicycleStationToLocation.LatLng, coordinates.EndPoint); Directions finalBycicleDirections = bicycleDirectionsService.SumDirections(directionsToNearestStation, directionsBetweenStations, directionsToTheEnd); Directions directionsByFoot = await bicycleDirectionsService.GetDirectionsByFoot(coordinates.StartingPoint, coordinates.EndPoint); if (bicycleDirectionsService.Compare(finalBycicleDirections, directionsByFoot) > 0) { return(Ok(finalBycicleDirections)); } return(Ok(directionsByFoot)); }