MapControl

В MapControl отображается символьная интерактивная карта Земли на базе Azure Maps. Вы можете отображать местоположения, добавлять метки и пользовательские слои, а также разрешать пользователям взаимодействовать с картой с помощью элементов управления для сдвига, масштабирования, поворота и наклона.

Для MapControl требуется учетная запись Azure Maps. Следуйте инструкциям на странице Управление учетной записью Azure Maps, чтобы создать учетную запись и получить токен службы карты.

Это правильный контроль?

Используйте MapControl, если вы хотите отобразить географические данные в приложении, например:

  • Отображение местоположения на карте с помощью метки.
  • Отображение коллекции точек интереса.
  • Предоставление возможностей интерактивной карты с увеличением и панорамированием.

Создание MapControl

Значок коллекции WinUI 3 Приложение WinUI 3 Gallery содержит интерактивные примеры элементов управления и функций WinUI. Получите приложение из Microsoft Store или просмотрите исходный код GitHub.

Добавьте MapControl на страницу и задайте MapServiceToken в ключ Azure Maps.

<MapControl x:Name="myMap"
            MapServiceToken="YOUR_AZURE_MAPS_TOKEN"
            Height="400" />

Задайте местоположение на карте

Задайте свойства Center и ZoomLevel для управления отображением карты.

using Windows.Devices.Geolocation;

var position = new BasicGeoposition { Latitude = 47.6062, Longitude = -122.3321 };
myMap.Center = new Geopoint(position);
myMap.ZoomLevel = 12;
<!-- Set initial center and zoom in XAML is not supported; set in code-behind -->
<MapControl x:Name="myMap"
            MapServiceToken="YOUR_AZURE_MAPS_TOKEN"
            Height="400" />

Добавить метки на карту

Используйте MapIcon для отображения значков на карте. Добавьте значки в MapElementsLayer, а затем добавьте слой в коллекцию слоев карты.

using Windows.Devices.Geolocation;
using Microsoft.UI.Xaml.Controls;
using System.Collections.Generic;

var position = new BasicGeoposition
{
    Latitude = 47.6062,
    Longitude = -122.3321
};

var icon = new MapIcon
{
    Location = new Geopoint(position),
};

var layer = new MapElementsLayer
{
    MapElements = new List<MapElement> { icon }
};

myMap.Layers.Add(layer);

Отображение или скрытие интерактивных элементов управления

Свойство InteractiveControlsVisible определяет, отображает ли карта встроенные элементы управления для масштабирования, поворота, наклона и стиля карты.

<MapControl x:Name="myMap"
            MapServiceToken="YOUR_AZURE_MAPS_TOKEN"
            InteractiveControlsVisible="True"
            Height="400" />

Обработка кликов по элементам карты

Подпишитесь на событие MapElementClick, чтобы реагировать, когда пользователь щелкает элемент карты, например маркер.

myMap.MapElementClick += (sender, args) =>
{
    foreach (var element in args.MapElements)
    {
        if (element is MapIcon clickedIcon)
        {
            // Handle the clicked icon
        }
    }
};

Обработка ошибок службы карты

Подпишитесь на событие MapServiceErrorOccurred, чтобы выявлять проблемы при взаимодействии с картографическим сервисом, такие как недействительный или отсутствующий MapServiceToken.

myMap.MapServiceErrorOccurred += (sender, args) =>
{
    // Log or display the error
    System.Diagnostics.Debug.WriteLine("Map service error occurred.");
};