public async System.Threading.Tasks.Task <FriendResult> GetFriendsClosestAsync(int friendId) { var friendsList = new List <Friend>(await _friendRepository.List()); var selected = friendsList.Find(x => x.Id == friendId); if (selected == null) { return(null); } var distancelist = new List <FriendDistance>(); foreach (var friend in friendsList) { if (friend.Id != friendId) { var friendDistance = new FriendDistance(); friendDistance.Id = friend.Id; friendDistance.Name = friend.Name; friendDistance.CityName = friend.CityName; friendDistance.Lat = friend.Lat; friendDistance.Lon = friend.Lon; var distance = HaversineDistance(selected.Lat, selected.Lon, friend.Lat, friend.Lon); var distanceFlat = GetFlatDistance(selected.Lat, selected.Lon, friend.Lat, friend.Lon); friendDistance.Distance = distance; friendDistance.DistanceFlat = distanceFlat; distancelist.Add(friendDistance); await _calculoHistoricoLogRepository.Insert( new CreateCalculoHistoricoLogCommand(DateTime.Now, Global.loggerUser.login, selected.Name, selected.Lat, selected.Lon, friend.Name, friend.Lat, friend.Lon, distance)); } } FriendResult result = new FriendResult(); result.Friend = selected; result.Friends = distancelist.OrderBy(i => i.Distance).Take(3).ToList(); return(result); }
public List <Friend> ListThreFriends(Friend newFriend) { var friends = _FriendInterface.List(); List <FriendDistance> listFriendDistances = new List <FriendDistance>(); List <Friend> ThreFriends = new List <Friend>(); MathLog mathLog = new MathLog(); foreach (var friend in friends) { FriendDistance friendDistance = new FriendDistance(); var x1 = newFriend.Latitude; var x2 = friend.Latitude; var y1 = newFriend.Longitude; var y2 = friend.Longitude; var x = x2 - x1; var y = y2 - y1; var sx = x * x; var sy = y * y; var sum = sx + sy; var distance = Math.Sqrt(sum); friendDistance.friend = friend; friendDistance.distance = distance; listFriendDistances.Add(friendDistance); mathLog.NewFriendId = newFriend.Id; mathLog.NewFriendName = newFriend.Name; mathLog.NewFriendLatitude = newFriend.Latitude; mathLog.NewFriendLongitude = newFriend.Longitude; mathLog.FriendId = friend.Id; mathLog.FriendName = friend.Name; mathLog.FriendLatitude = friend.Latitude; mathLog.FriendLongitude = friend.Longitude; mathLog.Distance = distance; } List <FriendDistance> orderList = listFriendDistances.OrderBy(friend => friend.distance).ToList(); var count = 0; foreach (var obj in orderList) { if ((count < 3)) { if (obj.distance != 0) { ThreFriends.Add(obj.friend); count++; } } else { break; } } return(ThreFriends); }