public List <Tracking> ObterAmigosMaisProximo(string Nome) { List <Tracking> tracking = new List <Tracking>(); double distancia = 0; try { var pessoas = _uow._db.Pessoas.Where(x => x.Nome.Trim().ToLower() == Nome.Trim().ToLower()); if (pessoas == null || pessoas.Count() == 0) { return(tracking); } var pessoaOrigem = pessoas.ToList().FirstOrDefault(); var outrasPessoas = _uow._db.Pessoas.Where(x => x.Id != pessoaOrigem.Id).ToList(); foreach (var pessoa in outrasPessoas) { var localizacaoOrigem = new Localizacao() { Latitude = Convert.ToDouble(pessoaOrigem.Latitude), Longitude = Convert.ToDouble(pessoaOrigem.Longitude) }; var localizacaoDestino = new Localizacao() { Latitude = Convert.ToDouble(pessoa.Longitude), Longitude = Convert.ToDouble(pessoa.Longitude) }; distancia = TrackingHelper.CalculateDistance(localizacaoOrigem, localizacaoDestino); tracking.Add(new Tracking { PessoaId = pessoa.Id, Nome = pessoa.Nome, Distancia = Math.Round(distancia, 2) }); // Salvar Histórico var historico = new CalculoHistoricoLog { PessoaOrigemID = pessoaOrigem.Id, PessoaDestinoID = pessoa.Id, Distancia = Convert.ToDecimal(Math.Round(distancia, 2)) }; var Novohistorico = new CalculoHistoricoLogRepository(_uow).Save(historico); } } catch (Exception ex) { throw new Exception(ex.Message); } return(tracking.OrderBy(x => x.Distancia).Take(3).ToList()); }