public GeoCoordinatesTransporter GetAverageLocation(GeoCoordinatesTransporter[] geoCoordinates) { double sumX = 0.0, sumY = 0.0; foreach (GeoCoordinatesTransporter item in geoCoordinates) { sumX += item.X; sumY += item.Y; } var averageCoordinates = new GeoCoordinatesTransporter(); averageCoordinates.X = sumX / geoCoordinates.Length; averageCoordinates.Y = sumY / geoCoordinates.Length; return(averageCoordinates); }
public async Task <int> ResolveDuration(GeoCoordinatesTransporter origin, GeoCoordinatesTransporter destination) { var parameters = new FormUrlEncodedContent(new[] { new KeyValuePair <string, string>("key", Configuration["GoogleServices:GoogleServicesKey"]), new KeyValuePair <string, string>("origins", origin.ToString()), new KeyValuePair <string, string>("destinations", destination.ToString()), new KeyValuePair <string, string>("mode", "walking") }); var response = await this.Client.GetAsync($"?{await parameters.ReadAsStringAsync()}"); if (response.IsSuccessStatusCode) { string responseString = await response.Content.ReadAsStringAsync(); var gMatrixTransporter = JsonConvert.DeserializeObject <DistanceMatrixResponse>(responseString); if (gMatrixTransporter.Status == GoogleDistanceMatrixResponseStatus.Ok) { return(ObtainDurationFromMatrix(gMatrixTransporter)); } } return(-1); }
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 Task <int> ResolveDistance(GeoCoordinatesTransporter origin, GeoCoordinatesTransporter destination) { throw new NotImplementedException(); }