You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MAUI地图:如何通过地理位置获取地址、城市及国家名称?

用Microsoft MAUI实现经纬度转地址信息

要根据经纬度获取城市、街道等地址详情,你需要用到反向地理编码功能。注意:Microsoft.Maui.Controls.Maps仅负责地图渲染,地址解析得靠MAUI内置的Geocoding API(属于Microsoft.Maui.Devices.Sensors命名空间),具体操作如下:

1. 配置位置权限

先给各平台配置必要的位置权限:

  • Android:在AndroidManifest.xml中添加
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    
  • iOS/MacCatalyst:在Info.plist里加权限说明
    <key>NSLocationWhenInUseUsageDescription</key>
    <string>需要访问位置以解析地址信息</string>
    
  • Windows:在Package.appxmanifest中启用Location权限

2. 编写反向地理编码代码

调用Geocoding.Default.GetPlacemarksAsync方法,传入经纬度就能拿到包含地址信息的Placemark对象,从中提取你需要的字段:

using Microsoft.Maui.Devices.Sensors;

public async Task<string> GetAddressFromCoords(double lat, double lon)
{
    try
    {
        // 检查并请求位置权限
        var status = await Permissions.CheckStatusAsync<Permissions.LocationWhenInUse>();
        if (status != PermissionStatus.Granted)
        {
            status = await Permissions.RequestAsync<Permissions.LocationWhenInUse>();
            if (status != PermissionStatus.Granted)
            {
                return "位置权限未授予,无法获取地址";
            }
        }

        // 执行反向地理编码
        var placemarks = await Geocoding.Default.GetPlacemarksAsync(lat, lon);
        var placemark = placemarks?.FirstOrDefault();

        if (placemark != null)
        {
            // 拼接所需地址信息
            var addressInfo = $"街道:{placemark.Thoroughfare}\n" +
                              $"城市:{placemark.Locality}\n" +
                              $"区域:{placemark.AdminArea}\n" +
                              $"邮编:{placemark.PostalCode}\n" +
                              $"国家:{placemark.CountryName}";
            return addressInfo;
        }
        else
        {
            return "未找到匹配的地址信息";
        }
    }
    catch (Exception ex)
    {
        return $"获取地址失败:{ex.Message}";
    }
}

3. 常用地址字段说明

Placemark里的这些属性对应不同的地址层级:

  • Thoroughfare:街道/道路名称
  • Locality:城市/城镇名称
  • AdminArea:州/省/行政区
  • PostalCode:邮政编码
  • CountryName:国家名称
  • SubLocality:子区域(如区、县)

额外提示

  • 部分平台对地理编码请求有频率限制,别短时间内大量调用
  • 如果内置API满足不了需求(比如要更精细的地址数据),可以针对各平台做原生实现:
    • Android:用android.location.Geocoder类
    • iOS:用CoreLocation.CLGeocoder类
    • Windows:用Windows.Services.Maps.MapLocationFinder类

内容的提问来源于stack exchange,提问作者Abhi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 14:57:24