Exemplo n.º 1
0
        public ActionResult <DistanceResponse> Get(DistanceCalculationMethod distanceMethod, MeasureUnit measureUnit,
                                                   [FromQuery][Range(-90, 90, ErrorMessage = "Must be in [-90, 90] interval")] double point1Latitude,
                                                   [FromQuery][Range(-180, 180, ErrorMessage = "Must be in [-180, 180] interval")] double point1Longitude,
                                                   [FromQuery][Range(-90, 90, ErrorMessage = "Must be in [-90, 90] interval")] double point2Latitude,
                                                   [FromQuery][Range(-180, 180, ErrorMessage = "Must be in [-180, 180] interval")] double point2Longitude)
        {
            var point1 = new DistancePoint
            {
                Latitude  = point1Latitude,
                Longitude = point1Longitude
            };
            var point2 = new DistancePoint
            {
                Latitude  = point2Latitude,
                Longitude = point2Longitude
            };

            return(new ActionResult <DistanceResponse>(new DistanceResponse
            {
                Distance = _distanceStrategy.CalculateDistance(point1, point2, measureUnit, distanceMethod)
            }));
        }
 public double CalculateDistance(IDistancePoint point1, IDistancePoint point2, MeasureUnit measureUnit, DistanceCalculationMethod distanceMethod)
 {
     //Saves calculation when points are equivalent
     if (point1.Equals(point2))
     {
         return(0);
     }
     else
     {
         return(_distanceMethods.FirstOrDefault(x => x.DistanceCalculationMethod == distanceMethod)?.CalculateDistance(point1, point2, measureUnit) ?? throw new ArgumentNullException(nameof(distanceMethod)));
     }
 }