Abrir la aplicación de mapa
En este artículo se describe cómo puedes usar la interfaz IMap de .NET Multi-platform App UI (.NET MAUI). Esta interfaz permite que una aplicación abra la aplicación de mapas instalada en una ubicación o marca de posición específica.
La implementación predeterminada de la interfaz IMap
está disponible a través de la propiedad Map.Default. Tanto la interfaz IMap
como la clase Map
están contenidas en el espacio de nombres Microsoft.Maui.ApplicationModel
.
Introducción
Para acceder a la función de explorador, se requiere la siguiente configuración específica para la plataforma.
Android usa el esquema de URI geo:
para iniciar la aplicación de mapas en el dispositivo. De este modo, se le podría pedir al usuario que seleccione desde una aplicación existente que admita este esquema de URI. Google Maps admite este esquema.
En el archivo Platforms/Android/AndroidManifest.xml, agrega los siguientes nodos queries/intent
al nodo manifest
:
<queries>
<intent>
<action android:name="android.intent.action.VIEW" />
<data android:scheme="geo"/>
</intent>
</queries>
Uso del mapa
La funcionalidad de mapa funciona llamando al método IMap.OpenAsync y pasando una instancia del tipo Location o Placemark. En el ejemplo siguiente se abre la aplicación de mapa instalada en una ubicación GPS específica:
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
}
}
Sugerencia
Los tipos Location
y Placemark
están en el espacio de nombres Microsoft.Maui.Devices.Sensors
.
Cuando se usa Placemark
para abrir el mapa, se requiere más información. La información ayuda a la aplicación de mapa a buscar el lugar que estás buscando. Se requiere la siguiente información:
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
}
}
Probar si el mapa se abrió
Siempre existe la posibilidad de que se produzca un error al abrir la aplicación de mapa, como cuando no hay una aplicación de mapa o la aplicación no tiene los permisos correctos. Para cada sobrecarga de método IMap.OpenAsync, hay un método IMap.TryOpenAsync correspondiente, que devuelve un valor booleano que indica que la aplicación de mapa se abrió correctamente. En el ejemplo de código siguiente se usa el método TryOpenAsync
para abrir el mapa:
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
}
Métodos de extensión
Siempre que se importe el espacio de nombres Microsoft.Maui.Devices.Sensors
, que un nuevo proyecto de .NET MAUI hace automáticamente, puedes usar el método de extensión OpenMapsAsync
integrado para abrir el mapa:
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
}
}
Agregar navegación
Al abrir el mapa, puedes calcular una ruta desde la ubicación actual del dispositivo a la ubicación especificada. Pasa el tipo MapLaunchOptions al método Map.OpenAsync
y especifica el modo de navegación. En el ejemplo siguiente se abre la aplicación de mapa y se especifica un modo de navegación de conducción:
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
}
}
Diferencias entre plataformas
En esta sección se describen las diferencias específicas de la plataforma con la API de mapas.
NavigationMode
admite Bicycling (Bicicleta), Driving (Automóvil) y Walking (A pie).