Xamarin.Forms Controllo mappa
Il Map
controllo è una visualizzazione multipiattaforma per la visualizzazione e l'annotazione delle mappe. Usa il controllo mappa nativo per ogni piattaforma, offrendo un'esperienza di mappe veloce e familiare per gli utenti:
La Map
classe definisce le proprietà seguenti che controllano l'aspetto e il comportamento della mappa:
IsShowingUser
, di tipobool
, indica se la mappa mostra la posizione corrente dell'utente.ItemsSource
, di tipoIEnumerable
, che specifica la raccolta diIEnumerable
elementi da visualizzare.ItemTemplate
, di tipoDataTemplate
, che specifica l'oggettoDataTemplate
da applicare a ogni elemento nella raccolta di elementi visualizzati.ItemTemplateSelector
, di tipoDataTemplateSelector
, che specifica l'oggettoDataTemplateSelector
che verrà usato per scegliere unDataTemplate
elemento in fase di esecuzione.HasScrollEnabled
, di tipobool
, determina se la mappa è autorizzata a scorrere.HasZoomEnabled
, di tipobool
, determina se la mappa può eseguire lo zoom.MapElements
, di tipoIList<MapElement>
, rappresenta l'elenco di elementi sulla mappa, ad esempio poligoni e polilinee.MapType
, di tipoMapType
, indica lo stile di visualizzazione della mappa.MoveToLastRegionOnLayoutChange
, di tipobool
, controlla se l'area della mappa visualizzata verrà spostata dall'area corrente all'area impostata in precedenza quando si verifica una modifica del layout.Pins
, di tipoIList<Pin>
, rappresenta l'elenco di puntini sulla mappa.TrafficEnabled
, di tipobool
, indica se i dati sul traffico sono sovrapposti sulla mappa.VisibleRegion
, di tipoMapSpan
, restituisce l'area attualmente visualizzata della mappa.
Queste proprietà, ad eccezione delle MapElements
proprietà , Pins
e VisibleRegion
, sono supportate da BindableProperty
oggetti , il che significa che possono essere destinazioni di data binding.
La Map
classe definisce anche un MapClicked
evento generato quando viene toccata la mappa. L'oggetto MapClickedEventArgs
che accompagna l'evento ha una singola proprietà denominata Position
, di tipo Position
. Quando viene generato l'evento, la Position
proprietà viene impostata sulla posizione della mappa toccata. Per informazioni sullo struct, vedere Posizione e distanza della Position
mappa.
Per informazioni sulle ItemsSource
proprietà , ItemTemplate
e ItemTemplateSelector
, vedere Visualizzare una raccolta di pin.
Visualizzare una mappa
Un Map
oggetto può essere visualizzato aggiungendolo a un layout o a una pagina:
<ContentPage ...
xmlns:maps="clr-namespace:Xamarin.Forms.Maps;assembly=Xamarin.Forms.Maps">
<maps:Map x:Name="map" />
</ContentPage>
Nota
Per fare riferimento Xamarin.Formsai controlli .Mappe, è necessaria una definizione di spazio dei nomi aggiuntivaxmlns
. Nell'esempio precedente viene fatto riferimento allo Xamarin.Forms.Maps
spazio dei nomi tramite la maps
parola chiave .
Il codice C# equivalente è il seguente:
using Xamarin.Forms;
using Xamarin.Forms.Maps;
namespace WorkingWithMaps
{
public class MapTypesPageCode : ContentPage
{
public MapTypesPageCode()
{
Map map = new Map();
Content = map;
}
}
}
Questo esempio chiama il costruttore predefinito Map
, che centra la mappa su Roma:
In alternativa, un MapSpan
argomento può essere passato a un Map
costruttore per impostare il punto centrale e il livello di zoom della mappa quando viene caricato. Per altre informazioni, vedere Visualizzare una posizione specifica su una mappa.
Tipi di mappa
La Map.MapType
proprietà può essere impostata su un MapType
membro di enumerazione per definire lo stile di visualizzazione della mappa. L'enumerazione MapType
definisce i membri seguenti:
Street
specifica che verrà visualizzata una mappa stradale.Satellite
specifica che verrà visualizzata una mappa contenente immagini satellitari.Hybrid
specifica che verrà visualizzata una mappa che combina dati stradali e satellitari.
Per impostazione predefinita, un oggetto Map
visualizzerà una mappa stradale se la MapType
proprietà non è definita. In alternativa, la MapType
proprietà può essere impostata su uno dei membri dell'enumerazione MapType
:
<maps:Map MapType="Satellite" />
Il codice C# equivalente è il seguente:
Map map = new Map
{
MapType = MapType.Satellite
};
Gli screenshot seguenti mostrano un Map
oggetto quando la MapType
proprietà è impostata su Street
:
Gli screenshot seguenti mostrano un Map
oggetto quando la MapType
proprietà è impostata su Satellite
:
Gli screenshot seguenti mostrano un Map
oggetto quando la MapType
proprietà è impostata su Hybrid
:
Visualizzare una posizione specifica su una mappa
L'area di una mappa da visualizzare quando viene caricata una mappa può essere impostata passando un MapSpan
argomento al Map
costruttore:
<maps:Map>
<x:Arguments>
<maps:MapSpan>
<x:Arguments>
<maps:Position>
<x:Arguments>
<x:Double>36.9628066</x:Double>
<x:Double>-122.0194722</x:Double>
</x:Arguments>
</maps:Position>
<x:Double>0.01</x:Double>
<x:Double>0.01</x:Double>
</x:Arguments>
</maps:MapSpan>
</x:Arguments>
</maps:Map>
Il codice C# equivalente è il seguente:
Position position = new Position(36.9628066, -122.0194722);
MapSpan mapSpan = new MapSpan(position, 0.01, 0.01);
Map map = new Map(mapSpan);
In questo esempio viene creato un Map
oggetto che mostra l'area specificata dall'oggetto MapSpan
. L'oggetto MapSpan
è centrato sulla latitudine e la longitudine rappresentata da un Position
oggetto e si estende su 0,01 latitudine e 0,01 gradi di longitudine. Per informazioni sullo struct, vedere Posizione e distanza della Position
mappa. Per informazioni sul passaggio di argomenti in XAML, vedere Passaggio di argomenti in XAML.
Il risultato è che quando la mappa viene visualizzata, si trova al centro su una posizione specifica e si estende su un numero specifico di gradi di latitudine e longitudine:
Creare un oggetto MapSpan
Esistono diversi approcci per la creazione MapSpan
di oggetti. Un approccio comune è fornire gli argomenti necessari al MapSpan
costruttore. Si tratta di una latitudine e una longitudine rappresentate da un Position
oggetto e double
valori che rappresentano i gradi di latitudine e longitudine che sono compresi in MapSpan
. Per informazioni sullo struct, vedere Posizione e distanza della Position
mappa.
In alternativa, nella MapSpan
classe sono disponibili tre metodi che restituiscono nuovi MapSpan
oggetti:
ClampLatitude
restituisce unMapSpan
oggetto con lo stessoLongitudeDegrees
dell'istanza della classe del metodo e un raggio definito daglinorth
argomenti esouth
.FromCenterAndRadius
restituisce un oggettoMapSpan
definito dai relativiPosition
argomenti eDistance
.WithZoom
restituisce unMapSpan
oggetto con lo stesso centro dell'istanza della classe del metodo, ma con un raggio moltiplicato per il relativodouble
argomento.
Per informazioni sullo struct, vedere Posizione e distanza della Distance
mappa.
Dopo aver creato un oggetto MapSpan
, è possibile accedere alle proprietà seguenti per recuperare i dati su di esso:
Center
, che rappresenta l'oggettoPosition
nel centro geografico dell'oggettoMapSpan
.LatitudeDegrees
, che rappresenta i gradi di latitudine estesa dall'oggettoMapSpan
.LongitudeDegrees
, che rappresenta i gradi di longitudine estesa daMapSpan
.Radius
, che rappresenta ilMapSpan
raggio.
Spostare la mappa
Il Map.MoveToRegion
metodo può essere chiamato per modificare la posizione e il livello di zoom di una mappa. Questo metodo accetta un MapSpan
argomento che definisce l'area della mappa da visualizzare e il relativo livello di zoom.
Il codice seguente mostra un esempio di spostamento dell'area visualizzata su una mappa:
MapSpan mapSpan = MapSpan.FromCenterAndRadius(position, Distance.FromKilometers(0.444));
map.MoveToRegion(mapSpan);
Zoom della mappa
Il livello di zoom di un Map
oggetto può essere modificato senza modificarne la posizione. A tale scopo, è possibile usare l'interfaccia utente della mappa o a livello di codice chiamando il MoveToRegion
metodo con un MapSpan
argomento che usa la posizione corrente come Position
argomento:
double zoomLevel = 0.5;
double latlongDegrees = 360 / (Math.Pow(2, zoomLevel));
if (map.VisibleRegion != null)
{
map.MoveToRegion(new MapSpan(map.VisibleRegion.Center, latlongDegrees, latlongDegrees));
}
In questo esempio, il MoveToRegion
metodo viene chiamato con un MapSpan
argomento che specifica la posizione corrente della mappa, tramite la Map.VisibleRegion
proprietà e il livello di zoom come gradi di latitudine e longitudine. Il risultato complessivo è che il livello di zoom della mappa viene modificato, ma la sua posizione non è. Un approccio alternativo per l'implementazione dello zoom su una mappa consiste nell'usare il MapSpan.WithZoom
metodo per controllare il fattore di zoom.
Importante
Lo zoom di una mappa, indipendentemente dall'interfaccia utente della mappa o a livello di programmazione, richiede che la Map.HasZoomEnabled
proprietà sia true
. Per altre informazioni su questa proprietà, vedere Disabilitare lo zoom.
Personalizzare il comportamento della mappa
Il comportamento di un Map
oggetto può essere personalizzato impostando alcune delle relative proprietà e gestendo l'evento MapClicked
.
Nota
È possibile ottenere una personalizzazione aggiuntiva del comportamento della mappa creando un renderer personalizzato della mappa. Per altre informazioni, vedere Personalizzazione di una Xamarin.Forms mappa.
Visualizzare i dati sul traffico
La Map
classe definisce una TrafficEnabled
proprietà di tipo bool
. Per impostazione predefinita, questa proprietà è false
, che indica che i dati del traffico non verranno sovrapposti sulla mappa. Quando questa proprietà è impostata su true
, i dati sul traffico sono sovrapposti sulla mappa. Nell'esempio seguente viene illustrata l'impostazione di questa proprietà:
<maps:Map TrafficEnabled="true" />
Il codice C# equivalente è il seguente:
Map map = new Map
{
TrafficEnabled = true
};
Disabilita scorrimento
La Map
classe definisce una HasScrollEnabled
proprietà di tipo bool
. Per impostazione predefinita, questa proprietà è true
, che indica che la mappa è autorizzata a scorrere. Quando questa proprietà è impostata su false
, la mappa non scorrerà. Nell'esempio seguente viene illustrata l'impostazione di questa proprietà:
<maps:Map HasScrollEnabled="false" />
Il codice C# equivalente è il seguente:
Map map = new Map
{
HasScrollEnabled = false
};
Disabilita zoom
La Map
classe definisce una HasZoomEnabled
proprietà di tipo bool
. Per impostazione predefinita, questa proprietà è true
, che indica che lo zoom può essere eseguito sulla mappa. Quando questa proprietà è impostata su false
, non è possibile ingrandire la mappa. Nell'esempio seguente viene illustrata l'impostazione di questa proprietà:
<maps:Map HasZoomEnabled="false" />
Il codice C# equivalente è il seguente:
Map map = new Map
{
HasZoomEnabled = false
};
Mostra la posizione dell'utente
La Map
classe definisce una IsShowingUser
proprietà di tipo bool
. Per impostazione predefinita, questa proprietà è false
, che indica che la mappa non mostra la posizione corrente dell'utente. Quando questa proprietà è impostata su true
, la mappa mostra la posizione corrente dell'utente. Nell'esempio seguente viene illustrata l'impostazione di questa proprietà:
<maps:Map IsShowingUser="true" />
Il codice C# equivalente è il seguente:
Map map = new Map
{
IsShowingUser = true
};
Importante
In iOS, Android e il piattaforma UWP (Universal Windows Platform), per accedere alla posizione dell'utente sono necessarie autorizzazioni per la posizione per l'applicazione. Per altre informazioni, vedere Configurazione della piattaforma.
Gestire l'area della mappa in caso di modifica del layout
La Map
classe definisce una MoveToLastRegionOnLayoutChange
proprietà di tipo bool
. Per impostazione predefinita, questa proprietà è true
, che indica che l'area della mappa visualizzata passerà dall'area corrente all'area impostata in precedenza quando si verifica una modifica del layout, ad esempio nella rotazione del dispositivo. Quando questa proprietà è impostata su false
, l'area della mappa visualizzata rimarrà allineata al centro quando si verifica una modifica del layout. Nell'esempio seguente viene illustrata l'impostazione di questa proprietà:
<maps:Map MoveToLastRegionOnLayoutChange="false" />
Il codice C# equivalente è il seguente:
Map map = new Map
{
MoveToLastRegionOnLayoutChange = false
};
Clic mappa
La Map
classe definisce un MapClicked
evento generato quando viene toccata la mappa. L'oggetto MapClickedEventArgs
che accompagna l'evento ha una singola proprietà denominata Position
, di tipo Position
. Quando viene generato l'evento, la Position
proprietà viene impostata sulla posizione della mappa toccata. Per informazioni sullo struct, vedere Posizione e distanza della Position
mappa.
L'esempio di codice seguente mostra un gestore eventi per l'evento MapClicked
:
void OnMapClicked(object sender, MapClickedEventArgs e)
{
System.Diagnostics.Debug.WriteLine($"MapClick: {e.Position.Latitude}, {e.Position.Longitude}");
}
In questo esempio, il OnMapClicked
gestore eventi restituisce la latitudine e la longitudine che rappresenta la posizione della mappa toccata. Il gestore eventi può essere registrato con l'evento MapClicked
come indicato di seguito:
<maps:Map MapClicked="OnMapClicked" />
Il codice C# equivalente è il seguente:
Map map = new Map();
map.MapClicked += OnMapClicked;