地理编码

Browse sample. 浏览示例

本文介绍如何使用 .NET Multi-platform App UI (.NET MAUI) IGeocoding 接口。 该接口提供的 API 可以将地理标记编码为位置坐标,还可以将地理代码坐标反向编码为位置标记。

IGeocoding 接口的默认实现通过 Geocoding.Default 属性提供。 IGeocoding 接口和 Geocoding 类都包含在 Microsoft.Maui.Devices.Sensors 命名空间中。

开始使用

要访问地理编码功能,需要以下特定于平台的设置。

无需设置。

使用地理编码

以下示例演示如何获取地址的位置坐标:

string address = "Microsoft Building 25 Redmond WA USA";
IEnumerable<Location> locations = await Geocoding.Default.GetLocationsAsync(address);

Location location = locations?.FirstOrDefault();

if (location != null)
    Console.WriteLine($"Latitude: {location.Latitude}, Longitude: {location.Longitude}, Altitude: {location.Altitude}");

高度并非总是可用的。 如果不可用,Altitude 属性可能为 null 或值可能为 0。 如果高度可用,此值为海拔高度(以米为单位)。

反向地理编码

反向地理编码是获取现有一组坐标对应的地标的过程。 以下示例演示如何获取地标:

private async Task<string> GetGeocodeReverseData(double latitude = 47.673988, double longitude = -122.121513)
{
    IEnumerable<Placemark> placemarks = await Geocoding.Default.GetPlacemarksAsync(latitude, longitude);

    Placemark placemark = placemarks?.FirstOrDefault();

    if (placemark != null)
    {
        return
            $"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";

    }

    return "";
}

两个位置之间的距离

LocationLocationExtensions 类定义了可用于计算两个位置之间的距离的方法。 有关获取两个位置之间的距离的示例,请参阅两个位置之间的距离