예제 #1
0
        public HomeLocationEditorViewModel(
            ISchedulerProvider schedulerProvider,
            INavigationService navigationService,
            IPlacesProvider placesProvider,
            IEmptyAutocompleteResultProvider autocompleteResultProvider,
            ISettingsProvider settingsProvider,
            IGeocodingProvider geocodingProvider) : base(schedulerProvider, placesProvider, geocodingProvider, navigationService)
        {
            _autocompleteResultProvider = autocompleteResultProvider;

            SelectedAutoCompleteResultModelObservable
            .Subscribe(async result =>
            {
                var address = await geocodingProvider.ReverseGeocodingFromPlaceId(result.PlaceId);
                settingsProvider.SetHomeAddress(address);
                navigationService.GoBack();
            });

            this.Changed(() => SelectedSearchResult)
            .Where(r => r is SetLocationOnMapResultModel)
            .Subscribe(result =>
            {
                navigationService.NavigateTo <ChooseHomeAddressOnMapViewModel>();
            });
        }
예제 #2
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 PerfectPlaceController(IDistanceResolver distanceResolver, IPlacesProvider placesProvider, ProgramDbContext dbContext)
 {
     this.DistanceResolver = distanceResolver;
     this.PlacesProvider   = placesProvider;
     this.Algo             = new PerfectPlaceAlgorithm();
     this.DbContext        = dbContext;
 }
        public DestinationLocationEditorViewModel(
            ISchedulerProvider schedulerProvider,
            INavigationService navigationService,
            IPlacesProvider placesProvider,
            IGeocodingProvider geocodingProvider,
            IChooseOnMapViewModelFactory chooseOnMapViewModelFactory,
            IEmptyAutocompleteResultProvider autocompleteResultProvider,
            ISelectedDestinationByMapSubscriber destinationByMapSubscriber)
            : base(schedulerProvider, placesProvider, geocodingProvider, navigationService)
        {
            _navigationService           = navigationService;
            _chooseOnMapViewModelFactory = chooseOnMapViewModelFactory;
            _autocompleteResultProvider  = autocompleteResultProvider;

            this.Changed(() => SelectedSearchResult)
            .Where(r => r is SetLocationOnMapResultModel)
            .ObserveOn(schedulerProvider.SynchronizationContextScheduler)
            .Subscribe(NavigateToChooseDestinationOnMapViewModel);

            destinationByMapSubscriber.Publisher.Handler.Subscribe(address =>
            {
                SelectedAddress = address;
                navigationService.GoBack();
            });
        }
예제 #5
0
 public PickupLocationEditorViewModel(
     ISchedulerProvider schedulerProviderer,
     INavigationService navigationService,
     IPlacesProvider placesProvider,
     IGeocodingProvider geocodingProvider,
     IEmptyAutocompleteResultProvider autocompleteResultProvider) : base(schedulerProviderer, placesProvider, geocodingProvider, navigationService)
 {
     _autocompleteResultProvider = autocompleteResultProvider;
 }
        protected BaseLocationEditorViewModel(
            ISchedulerProvider schedulerProvider,
            IPlacesProvider placesProvider,
            IGeocodingProvider geocodingProvider,
            INavigationService navigationService)
        {
            _navigationService = navigationService;

            this.Changed(() => SearchText)
            .Where(text => !string.IsNullOrEmpty(text))
            .Throttle(TimeSpan.FromMilliseconds(300), schedulerProvider.DefaultScheduler)
            .ObserveOn(schedulerProvider.SynchronizationContextScheduler)
            .Subscribe(async searchText =>
            {
                IsSearching   = true;
                SearchResults = await placesProvider.GetAutoCompleteResponse(searchText);
                IsSearching   = false;
            });

            this.Changed(() => SearchText)
            .Where(string.IsNullOrEmpty)
            .Subscribe(_ => SearchResults = GetEmptyAutocompleteResult());

            var selectedEmptyAutocompleteResultModelObservable = this.Changed(() => SelectedSearchResult)
                                                                 .Where(result => result is EmptyAutocompleteResultModel)
                                                                 .Cast <EmptyAutocompleteResultModel>();

            selectedEmptyAutocompleteResultModelObservable.Where(r => r.Address == null)
            .ObserveOn(schedulerProvider.SynchronizationContextScheduler)
            .Subscribe(selectedResult =>
            {
                switch (selectedResult)
                {
                case HomeResultModel _:
                    _navigationService.NavigateToSearchView <HomeLocationEditorViewModel>(callBack: null);
                    break;

                case WorkResultModel _:
                    _navigationService.NavigateToSearchView <WorkLocationEditorViewModel>(callBack: null);
                    break;
                }
            });

            var selectedEmptyAddress = selectedEmptyAutocompleteResultModelObservable
                                       .Where(r => r.Address != null)
                                       .Select(r => r.Address);

            SelectedAddress = SelectedAutoCompleteResultModelObservable
                              .Select(x => Observable.FromAsync(() => geocodingProvider.ReverseGeocodingFromPlaceId(x.PlaceId)))
                              .Concat()
                              .Merge(selectedEmptyAddress);
        }
        protected BaseLocationEditorViewModel(
            ISchedulerProvider schedulerProvider,
            IPlacesProvider placesProvider,
            IGeocodingProvider geocodingProvider,
            INavigationService navigationService)
        {
            _geocodingProvider = geocodingProvider;
            _navigationService = navigationService;

            this.Changed(() => SearchText)
            .Where(text => !string.IsNullOrEmpty(text))
            .Throttle(TimeSpan.FromMilliseconds(300), schedulerProvider.DefaultScheduler)
            .ObserveOn(schedulerProvider.SynchronizationContextScheduler)
            .Subscribe(async searchText =>
            {
                IsSearching   = true;
                SearchResults = await placesProvider.GetAutoCompleteResponse(searchText);
                IsSearching   = false;
            });

            this.Changed(() => SearchText)
            .Where(string.IsNullOrEmpty)
            .Subscribe(_ => SearchResults = GetEmptyAutocompleteResult());

            this.Changed(() => SelectedSearchResult)
            .Where(result => result is EmptyAutocompleteResultModel)
            .Cast <EmptyAutocompleteResultModel>()
            .ObserveOn(schedulerProvider.SynchronizationContextScheduler)
            .Subscribe(selectedResult =>
            {
                if (selectedResult.Address == null)
                {
                    NavigateToLocationEditorViewModel(selectedResult);
                }
                else
                {
                    SelectedAddress = selectedResult.Address;
                    _navigationService.GoBack();
                }
            });

            SelectedAutoCompleteResultModelObservable.Subscribe(async result =>
            {
                await SetAutoCompleteResultModel(result.PlaceId);
            });
        }
        public WorkLocationEditorViewModel(
            ISchedulerProvider schedulerProvider,
            INavigationService navigationService,
            IPlacesProvider placesProvider,
            IEmptyAutocompleteResultProvider autocompleteResultProvider,
            ISettingsProvider settingsProvider,
            IGeocodingProvider geocodingProvider) : base(schedulerProvider, placesProvider, geocodingProvider, navigationService)
        {
            _navigationService          = navigationService;
            _autocompleteResultProvider = autocompleteResultProvider;
            _settingsProvider           = settingsProvider;
            _geocodingProvider          = geocodingProvider;

            this.Changed(() => SelectedSearchResult)
            .Where(r => r is SetLocationOnMapResultModel)
            .Subscribe(result =>
            {
                navigationService.NavigateTo <ChooseWorkAddressOnMapViewModel>();
            });
        }
예제 #9
0
 public CitiesController(IPlacesProvider placesProvider)
 {
     this.placesProvider = placesProvider;
 }
예제 #10
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());
        }
예제 #11
0
 public BarangaysController(IPlacesProvider placesProvider)
 {
     this.placesProvider = placesProvider;
 }
예제 #12
0
 public RegionsController(IPlacesProvider placesProvider)
 {
     this.placesProvider = placesProvider;
 }