Questa panoramica descrive come configurare una mappa aggiunta a un'app per iOS utilizzando Maps SDK for iOS.
Panoramica
Dopo aver aggiunto una mappa all'app, puoi configurare le opzioni iniziali e le impostazioni di runtime della mappa. Per informazioni dettagliate sull'aggiunta di un contenitore della mappa, vedi Aggiungere una mappa.
Le impostazioni iniziali della mappa includono:
- La posizione della fotocamera, inclusi posizione, zoom, orientamento e inclinazione. Per informazioni dettagliate sul posizionamento della videocamera, consulta Videocamera e visualizzazione.
- Il colore di sfondo della mappa.
- Il tipo di mappa.
- I componenti dell'interfaccia utente da visualizzare, ad esempio i pulsanti di zoom e la bussola.
- I gesti da attivare.
In fase di runtime puoi configurare queste impostazioni e alcune altre aggiornando l'oggetto GMSMapView
.
Opzioni mappa
Quando viene inizializzata la visualizzazione della mappa, le opzioni di configurazione vengono impostate con
GMSMapViewOptions
.
Le proprietà di opzione includono frame
, camera
, mapID
o backgroundColor
.
Opzioni mappa | |
---|---|
cornice | Valore:
CGRect Il riquadro della mappa. Il valore predefinito è CGRectZero.
|
fotocamera | Valore:
GMSCameraPosition La posizione predefinita della videocamera della mappa.
|
mapID | Valore:
GMSMapID ID mappa Google. Parametro facoltativo.
|
backgroundColor | Valore:
UIColor Il valore predefinito è UIColor.lightGray
|
Configurare le opzioni della mappa
Puoi impostare le tue proprietà di opzione o passare un GMSMapViewOptions
con valori predefiniti direttamente a GMSMapView
.
Swift
let options = GMSMapViewOptions() options.camera = GMSCameraPosition.camera(withLatitude: -33.8683, longitude: 151.2086, zoom: 6) let mapView = GMSMapView(options:options)
Objective-C
GMSMapViewOptions *options = [[GMSMapViewOptions alloc] init]; options.camera = [GMSCameraPosition cameraWithLatitude:-33.8683 longitude:151.2086 zoom:6]; GMSMapView *mapView = [[GMSMapView alloc] initWithOptions:options];
Ecco un esempio di passaggio di un oggetto GMSMapViewOptions
con valori predefiniti direttamente a GMSMapView
.
Swift
let options = GMSMapViewOptions() let mapView = GMSMapView(options:options) //initialized with default values
Objective-C
GMSMapViewOptions *options = [[GMSMapViewOptions alloc] init]; GMSMapView *mapView = [[GMSMapView alloc] initWithOptions:options]; //initialized with default values
Configura il colore di sfondo
Quando lavori in modalità scura o passi da una visualizzazione della mappa all'altra, può essere utile override il colore di sfondo predefinito della mappa. Questo risultato può essere ottenuto impostando la proprietà backgroundColor
opzioni mappa.
Swift
let options = GMSMapViewOptions() options.backgroundColor = UIColor.yellowColor let mapView = GMSMapView(options:options)
Objective-C
GMSMapViewOptions *options = [[GMSMapViewOptions alloc] init]; options.backgroundColor = UIColor.yellowColor; GMSMapView *mapView = [[GMSMapView alloc] initWithOptions:options];
Tipi di mappe
Puoi personalizzare la mappa con uno dei diversi tipi di mappe. Il tipo di mappa regola la rappresentazione complessiva della mappa. Ad esempio, un atlante di solito contiene mappe politiche che si concentrano sulla visualizzazione dei confini e mappe stradali che mostrano tutte le strade di una città o di una regione. Maps SDK for iOS offre i seguenti tipi di mappe:
Tipo di mappa | |
---|---|
Normale | Valore:
kGMSTypeNormal Mappa stradale tipica. Mostra strade, alcune strutture costruite dall'uomo e elementi naturali importanti come i fiumi. Sono visibili anche le etichette di strade e elementi. Supporta l'impostazione della combinazione di colori della mappa su scura, chiara o in base alle impostazioni di sistema.
|
Ibrido | Valore:
kGMSTypeHybrid Dati delle fotografie satellitari con mappe stradali aggiunte. Sono visibili anche le etichette di strade e elementi. |
Satellite | Valore:
kGMSTypeSatellite Dati delle fotografie satellitari. Le etichette di strade e elementi non sono visibili.
|
Rilievo | Valore:
kGMSTypeTerrain Dati topografici. La mappa include colori, curve di livello, etichette e ombreggiatura prospettica. Sono visibili anche alcune strade ed etichette. Supporta
l'impostazione della combinazione di colori della mappa su scura, chiara o in base alle impostazioni di sistema.
|
Nessuno | Valore:
kGMSTypeNone Nessun riquadro della mappa. I riquadri della mappa di base non verranno visualizzati. Questa modalità è utile in combinazione con i livelli di riquadri. La visualizzazione dei dati sul traffico viene disattivata quando il tipo di mappa è impostato su nessuno. |
Modificare il tipo di mappa
Per impostare il tipo di una mappa, assegna un nuovo valore alla proprietà GMSMapView.mapType
. Ad esempio, per visualizzare un tipo di mappa satellitare:
Swift
let options = GMSMapViewOptions() options.camera = GMSCameraPosition.camera(withLatitude: -33.8683, longitude: 151.2086, zoom: 6) let mapView = GMSMapView(options:options) mapView.mapType = .satellite
Objective-C
GMSMapViewOptions *options = [[GMSMapViewOptions alloc] init]; options.camera = [GMSCameraPosition cameraWithLatitude:-33.8683 longitude:151.2086 zoom:6]; GMSMapView *mapView = [[GMSMapView alloc] initWithOptions:options]; mapView.mapType = kGMSTypeSatellite;
Il selettore di seguito mostra un confronto tra le mappe in rilievo, normali e ibride per la stessa località:
Mappe di interni
A livelli di zoom elevati, Maps SDK for iOS mostra i piani di vendita per gli spazi al chiuso, come aeroporti, centri commerciali, grandi negozi di vendita al dettaglio e stazioni di trasporto pubblico. I piani degli edifici sono integrati nei riquadri della mappa predefiniti per il tipo di mappa "normale" (kGMSTypeNormal
) e vengono attivati automaticamente quando l'utente aumenta lo zoom e svaniscono quando viene diminuito lo zoom della mappa.
Puoi disattivare le mappe indoor impostando la proprietà indoorEnabled
di
GMSMapView
su NO
.
Swift
mapView.isIndoorEnabled = false
Objective-C
mapView.indoorEnabled = NO;
In alternativa, puoi disattivare solo il controllo Selettore piano.
Aggiunta di planimetrie
I piani sono disponibili in alcune località. Se i dati del piano non sono disponibili per un edificio che vuoi mettere in evidenza nella tua richiesta, puoi:
- Aggiungi i piani direttamente a Google Maps. In questo modo, i tuoi piani saranno disponibili per tutti gli utenti di Google Maps.
- Visualizza una pianta come sovrapposizione del suolo. In questo modo, solo gli utenti della tua applicazione potranno visualizzare i tuoi piani.
Il livello di traffico
Puoi offrire agli utenti la possibilità di visualizzare la mappa con le informazioni sulla densità del traffico sovrapposte. In questo modo, possono avere un riepilogo visivo della situazione del traffico locale. Puoi attivare e disattivare il livello di traffico chiamando il metodo
trafficEnabled
. L'esempio seguente mostra come potrebbe apparire il livello del traffico su una mappa.
Accessibilità
Per impostazione predefinita, gli elementi di accessibilità sulla mappa sono nascosti. Puoi attivare
l'accessibilità impostando la proprietà accessibilityElementsHidden
di
GMSMapView
su NO
. Ciò comporta la generazione di elementi di accessibilità per gli oggetti in overlay (ad esempio GMSMarker
e finestre di informazioni, GMSPolyline
e così via).
Swift
mapView.accessibilityElementsHidden = false
Objective-C
mapView.accessibilityElementsHidden = NO;
Questa proprietà è conforme al protocollo UIAccessibility
informale, tranne per il fatto che il valore predefinito in Maps SDK for iOS è YES
.
La mia posizione
Per impostazione predefinita, sulla mappa non vengono visualizzati dati sulla posizione. Puoi attivare il punto blu "La mia posizione" e la direzione della bussola impostando myLocationEnabled
su attivoGMSMapView
.
Swift
mapView.isMyLocationEnabled = true
Objective-C
mapView.myLocationEnabled = YES;
L'attivazione di questa funzionalità fornisce la posizione attuale dell'utente tramite la proprietà
myLocation
. Questa proprietà potrebbe non essere immediatamente disponibile, ad esempio se iOS chiede all'utente di consentire l'accesso a questi dati. In questo caso è
nil
.
Swift
print("User's location: \(String(describing: mapView.myLocation))")
Objective-C
NSLog(@"User's location: %@", mapView.myLocation);
Edifici 3D
Molte città, se viste da vicino, avranno edifici 3D visibili, come nell'immagine di Seattle, Washington, riportata di seguito.
Puoi disattivare gli edifici in 3D impostando la proprietà corrispondente
GMSMapView
in Swift o Objective-C, come mostrato di seguito:
Swift
mapView.isBuildingsEnabled = false
Objective-C
[mapView setBuildingsEnabled:NO];
Spaziatura interna della mappa
Una mappa di Google è progettata per riempire l'intera regione definita dal GMSMapView
.
Diversi aspetti dell'aspetto e del comportamento della mappa sono definiti dalle dimensioni della visualizzazione:
- Il target della videocamera riflette il centro della regione imbottita.
- I controlli della mappa sono posizionati in base ai bordi della mappa.
- Le informazioni legali, come le dichiarazioni sul copyright o il logo di Google, vengono visualizzate lungo il bordo inferiore della mappa.
Puoi aggiungere spaziatura attorno ai bordi della mappa utilizzando GMSMapView
.Proprietà padding
. La mappa continua a riempire
l'intero contenitore, ma il posizionamento del testo e dei controlli, i gesti sulla mappa e i movimenti della
fotocamera si comportano come se fossero stati posizionati in uno spazio più piccolo. Ciò comporta
le seguenti modifiche:
- I movimenti della fotocamera che utilizzano chiamate API o pressioni dei pulsanti (ad es. bussola, la mia posizione) sono relativi alla regione con spaziatura interna.
GMSMapView
.projection
restituisce una proiezione che include solo la regione con spaziatura interna.- I controlli dell'interfaccia utente sono spostati dal bordo del contenitore per il numero di punti specificato.
Il padding può essere utile quando si progettano UI che si sovrappongono ad alcune parti della mappa. Ad esempio, nell'immagine la mappa è imbottita lungo i bordi superiore e destro. I controlli della mappa visibili e il testo legale vengono visualizzati lungo i bordi della regione con spaziatura interna, in verde, mentre la mappa continua a riempire l'intero contenitore, in blu. In questo esempio, puoi visualizzare un menu sul lato destro della mappa senza oscurare i controlli della mappa.
Per aggiungere spaziatura alla mappa, crea un oggetto UIEdgeInsets
e passalo a GMSMapView
.padding
.
Swift
// Insets are specified in this order: top, left, bottom, right let mapInsets = UIEdgeInsets(top: 100.0, left: 0.0, bottom: 0.0, right: 300.0) mapView.padding = mapInsets
Objective-C
// Insets are specified in this order: top, left, bottom, right UIEdgeInsets mapInsets = UIEdgeInsetsMake(100.0, 0.0, 0.0, 300.0); mapView.padding = mapInsets;
Combinazione di colori della mappa
Per le mappe di tipo normale e in rilievo, puoi impostare la combinazione di colori su scura, chiara o utilizzare le impostazioni di sistema correnti. Ad esempio, puoi scurire o illuminare la combinazione di colori della mappa in base all'ora del giorno o all'uso interno o esterno del dispositivo.
Utilizza GMSMapView
overrideUserInterfaceStyle:
per impostare e aggiornare la combinazione di colori della mappa.
Swift
let options = GMSMapViewOptions() // Map is init to use light mode by default. let mapView = GMSMapView(options: options) // Set map to use dark mode. mapView.overrideUserInterfaceStyle = .dark // Set map to use light mode. mapView.overrideUserInterfaceStyle = .light // Set map to use dark/light mode based on the value of traitCollection.userInterfaceStyle mapView.overrideUserInterfaceStyle = .unspecified
Objective-C
GMSMapViewOptions *options = [[GMSMapViewOptions alloc] init]; // Map is init to always use light mode. GMSMapView *mapView = [[GMSMapView alloc] initWithOptions:options]; // Set map to use dark mode. mapView.overrideUserInterfaceStyle = UIUserInterfaceStyleDark; // Set map to use light mode. mapView.overrideUserInterfaceStyle = UIUserInterfaceStyleLight; // Set map to use dark/light mode based on the value of traitCollection.userInterfaceStyle mapView.overrideUserInterfaceStyle = UIUserInterfaceStyleUnspecified;