예제 #1
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);
        }
예제 #2
0
        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());
        }