Example #1
0
        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);
        }
Example #3
0
        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();
 }