首页 > 解决方案 > 如何保存当前位置?

问题描述

我有个问题。我正在开发移动应用程序,我的用户可以通过登录当前位置存储旅行体验。

我现在已连接到 SQLite,我只是在探索 James Monemagno 的 Geolocator nuget。到目前为止,我可以在地图上找到当前位置的图钉,但我不确定如何将位置存储在数据库中。我想它不会是“位置”,它必须是纬度和经度,但是我将如何再次获得带有显示在我的帖子下的图钉的图片?各位有经验吗?

Public clas NoteViewMode : BaseViewModel
{
/////
private string _location;
        public string Location
        {
            get { return _location; }
            set
            {
                _location  = value;
                OnPropertyChanged();
            }
        }

        public double _latitude;
        public double Latitude
        {
            get { return _latitude; }
            set
            {
                _latitude = value;
                OnPropertyChanged();
            }
        }

        private double _longitude;
        public double Longitude
        {
            get { return _longitude; }
            set
            {
                _longitude = value;
                OnPropertyChanged();
            }
        }
}

      public Map()
                {
                    InitializeComponent();
                    GetPremissions();
                    BindingContext = ViewModel = new AdLogEntryViewModel();
                }
                private async void GetPremissions()
                {
                    try
                    {
                        var status = await CrossPermissions.Current.CheckPermissionStatusAsync(Plugin.Permissions.Abstractions.Permission.LocationWhenInUse);
                        if (status != Plugin.Permissions.Abstractions.PermissionStatus.Granted)
                        {
                            if (await CrossPermissions.Current.ShouldShowRequestPermissionRationaleAsync(Plugin.Permissions.Abstractions.Permission.LocationWhenInUse))
                            {
                                await DisplayAlert("We need location", "", "Ok");
                            }
                            var result = await CrossPermissions.Current.RequestPermissionsAsync(Plugin.Permissions.Abstractions.Permission.LocationWhenInUse);
                            if (result.ContainsKey(Plugin.Permissions.Abstractions.Permission.LocationWhenInUse))
                                status = result[Plugin.Permissions.Abstractions.Permission.LocationWhenInUse];
                        }
                        if (status == Plugin.Permissions.Abstractions.PermissionStatus.Granted)
                        {
                            locationsMap.IsShowingUser = true;
                            hasLocationPermission = true;


                            GetLocation();
                        }
                        else
                        {
                            await DisplayAlert("Location denied", "", "");
                        }

                    }

                    catch (Exception ex)
                    {
                        await DisplayAlert("erroe", ex.Message, "ok");
                    }
                }
                protected override async void OnAppearing()
                {
                    base.OnAppearing();

                    if (hasLocationPermission)
                    {
                        var locator = CrossGeolocator.Current;

                        locator.PositionChanged += Locator_PositionChanged;
                        await locator.StartListeningAsync(TimeSpan.Zero, 100);
                    }

                    GetLocation();
                }
                protected override void OnDisappearing()
                {
                    base.OnDisappearing();

                    CrossGeolocator.Current.StopListeningAsync();
                    CrossGeolocator.Current.PositionChanged -= Locator_PositionChanged;
                }
                void Locator_PositionChanged(object sender, Plugin.Geolocator.Abstractions.PositionEventArgs e)
                 {
                    MoveMap(e.Position);
                }
                private async void GetLocation()
                {
                    if (hasLocationPermission)
                    {
                        var locator = CrossGeolocator.Current;
                        var position = await locator.GetPositionAsync();
                        MoveMap(position);


                    }
                }
                private async void MoveMap(Position position)
                {
                    var center = new Xamarin.Forms.Maps.Position(position.Latitude, position.Longitude);
                    var span = new Xamarin.Forms.Maps.MapSpan(center, 1, 1);
                    locationsMap.MoveToRegion(span);

                }

标签: xamarin.forms

解决方案


您可以以编程方式将Pin 添加到地图

Pin pin = new Pin
{
  Label = "Santa Cruz",
  Address = "The city with a boardwalk",
  Type = PinType.Place,
  Position = new Position(36.9628066, -122.0194722)
};
map.Pins.Add(pin);

推荐阅读