Google maps 如何从Lat Long获取地址
您好,我正在为iOS和Android创建应用程序。我想解决的问题是,在加载页面上,我想显示带有地址的地图。我可以成功获取Lat Long,但无法获取要显示在标签上的地址。下面是我正在使用的代码Google maps 如何从Lat Long获取地址,google-maps,xamarin.forms,location,Google Maps,Xamarin.forms,Location,您好,我正在为iOS和Android创建应用程序。我想解决的问题是,在加载页面上,我想显示带有地址的地图。我可以成功获取Lat Long,但无法获取要显示在标签上的地址。下面是我正在使用的代码 using Plugin.Geolocator; using Xamarin.Forms.Maps; private Position _position; // Map map; double Lat, Long; string address = ""; publ
using Plugin.Geolocator;
using Xamarin.Forms.Maps;
private Position _position;
// Map map;
double Lat, Long;
string address = "";
public TestPage()
{
NavigationPage.SetHasNavigationBar(this, false);
InitializeComponent();
GetPosition();
if (_position != null)
{
Lat = _position.Latitude;
Long = _position.Longitude;
}
//Task<String> str = GetAddress();
map.MoveToRegion(MapSpan.FromCenterAndRadius(new Position(Lat, Long), Distance.FromMiles(1)));
var position = new Position(Lat, Long);
var pin = new Pin
{
Type = PinType.Place,
Position = position,
Label = ""
};
map.Pins.Add(pin);
var zoomLevel = 17.83;
var latlongdegrees = 360 / (Math.Pow(2, zoomLevel));
map.MoveToRegion(new MapSpan(position, latlongdegrees, latlongdegrees));
LabelTime.Text = DateTime.Now.ToString("hh:mm tt") + " " + DateTime.Now.ToString("MM/dd/yyyy");
string recentAddress = address; // trying to get adderss for location
}
GetAddress()
您可以使用Xamarin.Essentials获取placemark地址,如下所示
protected async override void OnAppearing()
{
await GetAddress();
}
private async Task GetAddress()
{
var lat = 47.673988;
var lon = -122.121513;
var placemarks = await Geocoding.GetPlacemarksAsync(lat, lon);
var placemark = placemarks?.FirstOrDefault();
if (placemark != null)
{
var geocodeAddress =
$"AdminArea: {placemark.AdminArea}\n" +
$"CountryCode: {placemark.CountryCode}\n" +
$"CountryName: {placemark.CountryName}\n" +
$"FeatureName: {placemark.FeatureName}\n" +
$"Locality: {placemark.Locality}\n" +
$"PostalCode: {placemark.PostalCode}\n" +
$"SubAdminArea: {placemark.SubAdminArea}\n" +
$"SubLocality: {placemark.SubLocality}\n" +
$"SubThoroughfare: {placemark.SubThoroughfare}\n" +
$"Thoroughfare: {placemark.Thoroughfare}\n";
Console.WriteLine(geocodeAddress);
}
}
有关详细信息,请参阅此
另外,对于详细的实现您可以使用Xamarin.Essentials获得placemark地址,如下所示
protected async override void OnAppearing()
{
await GetAddress();
}
private async Task GetAddress()
{
var lat = 47.673988;
var lon = -122.121513;
var placemarks = await Geocoding.GetPlacemarksAsync(lat, lon);
var placemark = placemarks?.FirstOrDefault();
if (placemark != null)
{
var geocodeAddress =
$"AdminArea: {placemark.AdminArea}\n" +
$"CountryCode: {placemark.CountryCode}\n" +
$"CountryName: {placemark.CountryName}\n" +
$"FeatureName: {placemark.FeatureName}\n" +
$"Locality: {placemark.Locality}\n" +
$"PostalCode: {placemark.PostalCode}\n" +
$"SubAdminArea: {placemark.SubAdminArea}\n" +
$"SubLocality: {placemark.SubLocality}\n" +
$"SubThoroughfare: {placemark.SubThoroughfare}\n" +
$"Thoroughfare: {placemark.Thoroughfare}\n";
Console.WriteLine(geocodeAddress);
}
}
有关详细信息,请参阅此
另外,对于详细的实现GetPosition是异步的,应该使用await@Jason我得到了这个职位,但我想从不工作的职位上得到地址。“不工作”是什么意思?它会给你一个错误或例外吗?它挂起来了吗?它会崩溃吗?它到底在做什么?@Jason在屏幕上加载的`OnAppearing()`方法开始映射和地址未显示之前,我没有收到任何异常或错误。您是否使用调试器验证没有收到任何结果?您发布的代码不清楚您是如何调用GetAddress的,也不清楚您是如何处理结果的。GetPosition是异步的,应该使用await@Jason我得到了这个职位,但我想从不工作的职位上得到地址。“不工作”是什么意思?它会给你一个错误或例外吗?它挂起来了吗?它会崩溃吗?它到底在做什么?@Jason在屏幕上加载的`OnAppearing()`方法开始映射和地址未显示之前,我没有收到任何异常或错误。您是否使用调试器验证没有收到任何结果?你发布的代码不清楚你是如何调用GetAddress的,或者你对结果做了什么。谢谢你的回复,但我想在页面打开时获取地址。这是可能的,我可以在页面打开时获取地址。看起来我尝试了几次,但注意到我得到了价值。您可以查看我上面出现的代码部分
TestPage\u
并向我提供建议。谢谢,我已经更新了上面的代码。它起作用了。我已经测试过了。谢谢你的回复,但我想在页面打开时获得地址。这可能吗?我可以在页面打开时获得地址。看起来我尝试了几次,但注意到我得到了价值。您可以查看我上面出现的代码部分TestPage\u
并向我提供建议。谢谢,我已经更新了上面的代码。它起作用了。我已经测试过了。
protected override void OnAppearing()
{
this.Appearing += TestPage_Appearing; //Subscribe to event
base.OnAppearing();
}
protected async void TestPage_Appearing(object sender, EventArgs args)
{
GetPosition();
address= await GetAddress();
string a = address;
this.Appearing -= TestPage_Appearing; //Unsubscribe
}
protected async override void OnAppearing()
{
await GetAddress();
}
private async Task GetAddress()
{
var lat = 47.673988;
var lon = -122.121513;
var placemarks = await Geocoding.GetPlacemarksAsync(lat, lon);
var placemark = placemarks?.FirstOrDefault();
if (placemark != null)
{
var geocodeAddress =
$"AdminArea: {placemark.AdminArea}\n" +
$"CountryCode: {placemark.CountryCode}\n" +
$"CountryName: {placemark.CountryName}\n" +
$"FeatureName: {placemark.FeatureName}\n" +
$"Locality: {placemark.Locality}\n" +
$"PostalCode: {placemark.PostalCode}\n" +
$"SubAdminArea: {placemark.SubAdminArea}\n" +
$"SubLocality: {placemark.SubLocality}\n" +
$"SubThoroughfare: {placemark.SubThoroughfare}\n" +
$"Thoroughfare: {placemark.Thoroughfare}\n";
Console.WriteLine(geocodeAddress);
}
}