public async Task <PlaceTransporter> FindPerfectPlace(IPlacesProvider placesProvider, String[] placesTypes, IDistanceResolver distanceResolver, GeoCoordinatesTransporter[] geoCoordinates, GeoCoordinatesTransporter leaderCoordinates) { var averageCoordinates = this.GetAverageLocation(geoCoordinates); var candidatePlaces = await placesProvider.LookForNearbyPlacesAsync(new PlacesQueryTransporter { Latitude = averageCoordinates.Y, Longitude = averageCoordinates.X, Radius = 1000, PlacesTypes = placesTypes }); if (candidatePlaces.Count() == 0) { return(null); } double minimumDistance = 0; PlaceTransporter finalPlace = null; foreach (var item1 in candidatePlaces) { double distance = 0; distance += CalcDistance(item1.Latitude, item1.Longitude, double.Parse(averageCoordinates.Y.ToString("N4", CultureInfo.InvariantCulture), CultureInfo.InvariantCulture), double.Parse(averageCoordinates.X.ToString("N4", CultureInfo.InvariantCulture), CultureInfo.InvariantCulture)); if (finalPlace == null || minimumDistance > distance) { minimumDistance = distance; finalPlace = item1; } } return(finalPlace); }
public async Task <PlaceTransporter> DefaultBehaviour(GeoCoordinatesTransporter[] geoCoordinates, IPlacesProvider placesProvider, IEnumerable <string> placesTypes, int radius) { var foundPlaces = await placesProvider.LookForNearbyPlacesAsync(new PlacesQueryTransporter() { Latitude = geoCoordinates.First().Y, Longitude = geoCoordinates.First().X, PlacesTypes = placesTypes, Radius = radius }); return(foundPlaces.Last()); }