Google maps 如何从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

您好,我正在为iOS和Android创建应用程序。我想解决的问题是,在加载页面上,我想显示带有地址的地图。我可以成功获取Lat Long,但无法获取要显示在标签上的地址。下面是我正在使用的代码

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);
        }
    }