Questa panoramica descrive come configurare una mappa aggiunta a un'app per iOS utilizzando Maps SDK for iOS.
Panoramica
Dopo aver aggiunto una mappa alla tua app, puoi configurare le opzioni iniziali e le impostazioni di runtime della mappa. Per maggiori dettagli sull'aggiunta di un contenitore di mappa, consulta Aggiungere una mappa.
Le impostazioni iniziali della mappa includono:
- La posizione della fotocamera, ad esempio: posizione, zoom, orientamento e inclinazione. Per maggiori dettagli sul posizionamento della videocamera, consulta Fotocamera e vista.
- 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 e alcune impostazioni aggiuntive aggiornando l'oggetto GMSMapView
.
Opzioni mappa
Durante l'inizializzazione della visualizzazione mappa, le opzioni di configurazione sono impostate su
GMSMapViewOptions
. Le proprietà opzione includono frame
, camera
, mapID
o
backgroundColor
.
Opzioni mappa | |
---|---|
cornice | Valore:
CGRect Il frame della mappa. Il valore predefinito è CGRectZero.
|
fotocamera | Valore:
GMSCameraPosition La posizione predefinita della fotocamera della mappa.
|
mapID | Valore:
GMSMapID Google mapID. Parametro facoltativo.
|
backgroundColor | Valore:
UIColor Il valore predefinito è UIColor.lightGray
|
Configura opzioni della mappa
Puoi impostare le proprietà delle opzioni o passare un'istanza GMSMapViewOptions
creata 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 come passare 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à Buio o passi da una visualizzazione mappa a un'altra, può essere utile sostituire il colore di sfondo predefinito della mappa. A tal fine, imposta la proprietà backgroundColor
delle opzioni della 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 mappa
Puoi personalizzare la mappa con uno dei diversi tipi di mappa disponibili. Il tipo di mappa regola la rappresentazione complessiva della mappa. Ad esempio, un atlante di solito contiene mappe politiche che si concentrano sull'indicazione dei confini, mentre mappe strade che mostrano tutte le strade di una città o regione. Maps SDK for iOS offre i seguenti tipi di mappe:
Tipo di mappa | |
---|---|
Normale | Valore:
kGMSTypeNormal Mappa stradale tipica. Mostra le strade, alcune caratteristiche costruite da esseri umani e importanti elementi naturali come i fiumi. Sono visibili anche le etichette delle strade e degli elementi.
|
Ibrido | Valore:
kGMSTypeHybrid Dati delle foto satellitari con l'aggiunta di mappe stradali. Sono visibili anche le etichette delle strade e degli elementi. |
Satellite | Valore:
kGMSTypeSatellite Dati delle foto satellitari. Le etichette delle strade e degli elementi non sono visibili.
|
Terreno | Valore:
kGMSTypeTerrain Dati topografici. La mappa include colori, linee di contorno ed etichette
e ombreggiatura prospettica. Sono visibili anche alcune strade ed etichette.
|
Nessuno | Valore:
kGMSTypeNone Nessun riquadro mappa. I riquadri della mappa base non verranno visualizzati. Questa modalità è utile in combinazione con i livelli dei riquadri. La visualizzazione dei dati sul traffico è disattivata quando il tipo di mappa è impostato su Nessuno. |
Modifica del tipo di mappa
Per impostare il tipo di 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 mappe con rilievi, normali e ibride per la stessa località:
Mappe di interni
A livelli di zoom elevati, Maps SDK for iOS mostra le planimetrie degli spazi interni come aeroporti, centri commerciali, grandi negozi e stazioni di trasporto pubblico. Le planimetrie per interni sono integrate nei riquadri predefiniti della mappa per il tipo di mappa "normale" (kGMSTypeNormal
) e vengono attivate automaticamente quando l'utente aumenta lo zoom e svaniscono quando la mappa diminuisce.
Puoi disattivare le mappe di interni impostando la proprietà indoorEnabled
di
GMSMapView
su NO
.
Swift
mapView.isIndoorEnabled = false
Objective-C
mapView.indoorEnabled = NO;
In alternativa, puoi disattivare solo il controllo del selettore di piani.
Aggiunta di planimetrie
Le planimetrie sono disponibili solo in alcune località. Se i dati della planimetria non sono disponibili per un edificio che vuoi mettere in evidenza nella tua applicazione, puoi:
- Aggiungi le planimetrie direttamente a Google Maps. In questo modo, i tuoi piani sono disponibili per tutti gli utenti di Google Maps.
- Mostra una pianta del piano come overlay del suolo. Ciò consente solo agli utenti dell'applicazione di visualizzare le tue planimetrie.
Il livello di traffico
Puoi offrire agli utenti la possibilità di visualizzare la mappa con sopra le informazioni sulla densità del traffico. Fornisce 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 di 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
. In questo modo vengono generati elementi di accessibilità per gli oggetti in overlay (come GMSMarker
e finestre informative, GMSPolyline
e così via).
Swift
mapView.accessibilityElementsHidden = false
Objective-C
mapView.accessibilityElementsHidden = NO;
Questa proprietà è conforme al protocollo UIAccessibility
informale, ad eccezione del fatto che
il valore predefinito in Maps SDK for iOS è YES
.
La mia località
Per impostazione predefinita, sulla mappa non vengono mostrati dati sulla posizione. Puoi attivare il punto blu "La mia posizione" e la direzione della bussola impostando myLocationEnabled
su GMSMapView
.
Swift
mapView.isMyLocationEnabled = true
Objective-C
mapView.myLocationEnabled = YES;
L'attivazione di questa funzionalità fornisce la posizione corrente dell'utente tramite la
proprietà myLocation
. Questa proprietà potrebbe non essere immediatamente disponibile, ad esempio se all'utente viene richiesto da iOS 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 in 3D
Molte città, se viste da vicino, mostrano edifici in 3D, come puoi vedere nell'immagine di Seattle, Washington qui sotto.
Puoi disattivare gli edifici in 3D impostando la proprietà GMSMapView
corrispondente 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 Maps è 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 fotocamera riflette il centro dell'area coperta.
- I controlli della mappa sono posizionati in relazione ai bordi della mappa.
- Informazioni legali, come dichiarazioni sul copyright o il logo Google, appaiono lungo il bordo inferiore della mappa.
Puoi aggiungere una spaziatura interna intorno ai bordi della mappa utilizzando l'GMSMapView
.padding
. La mappa continua a riempire l'intero contenitore, ma il posizionamento di testo e controllo, i gesti sulla mappa e i movimenti della fotocamera si comportano come se fossero stati collocati in uno spazio più piccolo. Ciò comporta le seguenti modifiche:
- I movimenti della videocamera tramite chiamate API o pressioni dei pulsanti (ad es. bussola, la mia posizione) si riferiscono all'area coperta.
GMSMapView
.projection
restituisce una proiezione che include solo l'area geografica con padding.- L'offset dei controlli UI dal bordo del container è determinato dal numero di punti specificato.
La spaziatura interna può essere utile durante la progettazione di interfacce utente che si sovrappongono in alcune parti della mappa. Ad esempio, nell'immagine la mappa viene riempita lungo i bordi superiore e destro. I controlli della mappa visibili e il testo legale vengono visualizzati lungo i bordi dell'area geografica con spaziatura interna, mostrati in verde, mentre la mappa continua a riempire l'intero container (mostrato in blu). In questo esempio, potresti far scorrere un menu sul lato destro della mappa senza occultare i controlli.
Per aggiungere una spaziatura interna alla mappa, crea un oggetto UIEdgeInsets
e passalo a GMSMapView
.Proprietà 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;