public async Task <double> Handle(CreateAndCalculateDistanceCommand request, CancellationToken cancellationToken) { double R = 6371; // km double sLat1 = Math.Sin(ToRadians(request.Lat1)); double sLat2 = Math.Sin(ToRadians(request.Lat2)); double cLat1 = Math.Cos(ToRadians(request.Lat1)); double cLat2 = Math.Cos(ToRadians(request.Lat2)); double cLon = Math.Cos(ToRadians(request.Lon1) - ToRadians(request.Lon2)); double cosD = sLat1 * sLat2 + cLat1 * cLat2 * cLon; double d = Math.Acos(cosD); double dist = R * d; var entity = new UserDistance { FromPoint = new Domain.Location { Latitude = request.Lat1, Longitude = request.Lon1 }, ToPoint = new Domain.Location { Latitude = request.Lat2, Longitude = request.Lon2, }, Distance = dist, UserId = _currentUserService.UserId, Created = DateTime.Now, LastModified = DateTime.Now, }; _db.UserDistances.Add(entity); await _db.SaveChangesAsync(cancellationToken); return(dist); }