Класс Google Place Api Prediction приведен к Position или чему-то эквивалентному - PullRequest
0 голосов
/ 23 апреля 2020

Я работаю над проектом Xamarin Forms. У меня есть очень простая страница, где соискатель ищет вакансии, вводя местоположение (например, Нью-Йорк) и радиус (сборщик). У меня есть следующий код в моем PageViewModel:

public class SearchPageViewModel : BaseViewModel

    {

        private readonly INavigation _navigation;

        private readonly GooglePlacesApiService _api;

        private IEnumerable<JobPost> Posts;
        public int RadiusIndex {get;set;}

        public SearchPageViewModel (INavigation navigation, IEnumerable<JobPost> posts)

        {

            _navigation = navigation;
            var settings = GoogleApiSettings.Builder.WithApiKey("MY_API_KEY").Build();
            _api = new GooglePlacesApiService(settings);
            this.posts =posts;

        }

        public ICommand DoSearchCommand

        => new Command(async () => await DoSearchAsync().ConfigureAwait(false), () => CanSearch);

        public ICommand SelectItemCommand

        => new Command<Prediction>(async (prediction) =>

        {

             //!!!Filter jobposts based on position and radius to be able to display it!!!

            _api.ResetSessionToken();

        });

        private string _searchText;

        public string SearchText
        {

            get => _searchText;

            set 
            {
                if (SetProperty(ref _searchText, value))

                    OnPropertyChanged("CanSearch");
            }

        }

        private List<Prediction> _results;

        public List<Prediction> Results

        {

            get => _results;

            set => SetProperty(ref _results, value);

        }



        public bool CanSearch => !string.IsNullOrWhiteSpace(SearchText) && SearchText.Length > 2;

        private async Task DoSearchAsync()

        {

            var results = await _api.GetPredictionsAsync(SearchText)

                                    .ConfigureAwait(false);

            if(results != null && results.Status.Equals("OK"))

            {

                ResultCount = results.Items.Count;

                Results = results.Items;

                OnPropertyChanged("HasResults");

            }

        }

    }

public class JobPost
{
    public Position Location {get;set;}
}

Хорошо, пока он работает хорошо. Как только кнопка поиска нажата, соискатель получает список прогнозов и выбирает место. Но теперь проблема в том, как мне определить местоположение (долготу и широту) выбранного прогноза, чтобы я мог отфильтровать сообщения о вакансиях, чтобы я мог воспроизвести результат для соискателя. Заранее спасибо.

1 Ответ

1 голос
/ 23 апреля 2020

используйте Essentials GeoCoding плагин

var address =  "New York";
var locations = await Geocoding.GetLocationsAsync(address);

locations будет список потенциальных совпадений, каждый с лат / долг

var location = locations?.FirstOrDefault();
if (location != null)
{
    Console.WriteLine($"Latitude: {location.Latitude}, Longitude: {location.Longitude}, Altitude: {location.Altitude}");
}
...