Пример #1
0
        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));
        }
Пример #2
0
        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));
        }