xamarin.forms - 如何保存当前位置?
问题描述
我有个问题。我正在开发移动应用程序,我的用户可以通过登录当前位置存储旅行体验。
我现在已连接到 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);
}
解决方案
您可以以编程方式将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);
推荐阅读
- docusignapi - 按文件夹名称访问模板信息 [DocuSign]
- azure - 将 Graph API 应用程序权限分配给 Azure DevOps Pipeline 中的托管标识 - Authorization_RequestDenied
- flutter - 如何在 Dart/Flutter 中根据类标签和属性名称抓取数据
- ios - 使用 Form swift UI 时不会调用文件导入器/文件移动器方法
- python-3.x - 如何分块读取大文件?
- r - 使用 R 创建热图
- c++ - cmake:设置特定文件的编译方式
- spring - SimpleJdbcCall 不等待 oracle SP 完成 - Spring 5.X
- html - 子菜单在vue js应用程序中快速消失
- reactjs - 在 ReactJS 中将选项标签动态添加到 Select 标签的问题