지도 앱 열기

Browse sample. 샘플 찾아보기

이 문서에서는 .NET 다중 플랫폼 앱 UI(.NET MAUI) IMap 인터페이스를 사용하는 방법을 설명합니다. 이 인터페이스를 사용하면 애플리케이션이 설치된 맵 애플리케이션을 특정 위치에 열거나 표시할 수 있습니다.

인터페이스의 IMap 기본 구현은 속성을 통해 Map.Default 사용할 수 있습니다. IMap 인터페이스와 Map 클래스는 모두 네임스페이스에 Microsoft.Maui.ApplicationModel 포함됩니다.

시작하기

브라우저 기능에 액세스하려면 다음 플랫폼별 설정이 필요합니다.

Android는 geo: URI 체계를 사용하여 디바이스에서 지도 애플리케이션을 시작합니다. 이 경우 사용자에게 이 URI 체계를 지원하는 기존 앱에서 선택하라는 메시지가 표시 될 수 있습니다. Google 지도 이 체계를 지원합니다.

Platforms/Android/AndroidManifest.xml 파일에서 노드에 다음 queries/intent 노드를 manifest 추가합니다.

<queries>
  <intent>
    <action android:name="android.intent.action.VIEW" />
    <data android:scheme="geo"/>
  </intent>
</queries>

맵 사용

맵 기능은 메서드를 IMap.OpenAsync 호출하고 인스턴스 또는 Placemark 형식을 Location 전달하는 방식으로 작동합니다. 다음 예제에서는 특정 GPS 위치에서 설치된 지도 앱을 엽니다.

public async Task NavigateToBuilding25()
{
    var location = new Location(47.645160, -122.1306032);
    var options = new MapLaunchOptions { Name = "Microsoft Building 25" };

    try
    {
        await Map.Default.OpenAsync(location, options);
    }
    catch (Exception ex)
    {
        // No map application available to open
    }
}

Placemark 형식은 Location 네임스페이스에 Microsoft.Maui.Devices.Sensors 있습니다.

맵을 Placemark 열 때는 자세한 정보가 필요합니다. 이 정보는 맵 앱이 원하는 위치를 검색하는 데 도움이 됩니다. 다음과 같은 정보가 필요합니다.

public async Task NavigateToBuilding()
{
    var placemark = new Placemark
    {
        CountryName = "United States",
        AdminArea = "WA",
        Thoroughfare = "Microsoft Building 25",
        Locality = "Redmond"
    };
    var options = new MapLaunchOptions { Name = "Microsoft Building 25" };

    try
    {
        await Map.Default.OpenAsync(placemark, options);
    }
    catch (Exception ex)
    {
        // No map application available to open or placemark can not be located
    }
}

맵이 열렸는지 테스트

지도 앱이 없거나 앱에 올바른 권한이 없는 경우와 같이 지도 앱을 열지 못할 가능성이 항상 있습니다. 각 IMap.OpenAsync 메서드 오버로드에 대해 지도 앱이 성공적으로 열렸음을 나타내는 부울 값을 반환하는 해당 IMap.TryOpenAsync 메서드가 있습니다. 다음 코드 예제에서는 이 메서드를 TryOpenAsync 사용하여 맵을 엽니다.

var location = new Location(47.645160, -122.1306032);
var options = new MapLaunchOptions { Name = "Microsoft Building 25" };

if (await Map.Default.TryOpenAsync(location, options) == false)
{
    // Map failed to open
}

확장 메서드

새 .NET MAUI 프로젝트가 자동으로 수행하는 네임스페이스를 가져오는 한 Microsoft.Maui.Devices.Sensors 기본 제공 확장 메서드 OpenMapsAsync 를 사용하여 맵을 열 수 있습니다.

public async Task NavigateToBuildingByPlacemark()
{
    var placemark = new Placemark
    {
        CountryName = "United States",
        AdminArea = "WA",
        Thoroughfare = "Microsoft Building 25",
        Locality = "Redmond"
    };

    var options = new MapLaunchOptions { Name = "Microsoft Building 25" };

    try
    {
        await placemark.OpenMapsAsync(options);
    }
    catch (Exception ex)
    {
        // No map application available to open or placemark can not be located
    }
}

탐색 추가

맵을 열면 디바이스의 현재 위치에서 지정된 위치로의 경로를 계산할 수 있습니다. MapLaunchOptions 탐색 모드를 Map.OpenAsync 지정하여 메서드에 형식을 전달합니다. 다음 예제에서는 지도 앱을 열고 운전 탐색 모드를 지정합니다.

public async Task DriveToBuilding25()
{
    var location = new Location(47.645160, -122.1306032);
    var options = new MapLaunchOptions { Name = "Microsoft Building 25",
                                         NavigationMode = NavigationMode.Driving };

    try
    {
        await Map.Default.OpenAsync(location, options);
    }
    catch (Exception ex)
    {
        // No map application available to open
    }
}

플랫폼 간 차이점

이 섹션에서는 지도 API와의 플랫폼별 차이점에 대해 설명합니다.

NavigationMode에서 자전거 타기, 자가용, 걷기를 지원합니다.