public int CalculateDistanceBetweenLocations(GeoLocation searchLocation, double latitude, double longitude) { if (searchLocation == null) { return 0; } var geoCoordinate1 = new GeoCoordinate(searchLocation.Latitude, searchLocation.Longitude); var geoCoordinate2 = new GeoCoordinate(latitude, longitude); var distanceInMiles = (geoCoordinate1.GetDistanceTo(geoCoordinate2) / 1000) / KilometresPerMile; return (int)Math.Round(distanceInMiles); }
private List<UserResult> RetrieveUsersInArea(GeoLocation searchLocation, int radius) { var users = _userRepository.RetrieveAllActiveUsers(); var usersInArea = new List<UserResult>(); foreach (var user in users) { var distanceBetweenLocations = _distanceCalculator.CalculateDistanceBetweenLocations(searchLocation, user.Latitude, user.Longitude); if (distanceBetweenLocations < radius) { usersInArea.Add(new UserResult { UserId = user.UserId, Distance = distanceBetweenLocations, Rating = user.Rating }); } } return usersInArea; }