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);
        }
示例#2
0
        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);
        }