Configurare una mappa

Seleziona la piattaforma: Android iOS

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 informazioni dettagliate sull'aggiunta di un container mappa, consulta la sezione Aggiungere una mappa.

Le impostazioni iniziali della mappa includono:

In fase di runtime, puoi configurare queste impostazioni e alcune impostazioni di aggiunta aggiornando l'oggetto GMSMapView.

Opzioni mappa

Durante l'inizializzazione della visualizzazione mappa, le opzioni di configurazione sono impostate con GMSMapViewOptions. Le proprietà dell'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 sulla mappa.
mapID
Valore: GMSMapID
ID mappa Google. Parametro facoltativo.
backgroundColor
Valore: UIColor
Il valore predefinito è UIColor.lightGray

Configura opzioni mappa

Puoi impostare le tue proprietà delle opzioni o trasferire 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 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à Buio o passi da una visualizzazione mappa all'altra, può essere utile sostituire il colore di sfondo predefinito della mappa. A questo scopo, 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 mappe

Puoi personalizzare la mappa con uno dei vari tipi di mappe disponibili. Il tipo di mappa regola la rappresentazione complessiva della mappa. Ad esempio, un atlante di solito contiene mappe politiche incentrate 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 le strade, alcuni elementi costruiti da esseri umani e importanti elementi naturali come i fiumi. Sono visibili anche le etichette di strade e elementi. Supporta l'impostazione della combinazione di colori della mappa su scura o chiara oppure in modo da seguire le impostazioni di sistema.
Ibrido
Valore: kGMSTypeHybrid
Dati delle fotografie satellitari con l'aggiunta di mappe stradali. 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.
Terreno
Valore: kGMSTypeTerrain
Dati topografici. La mappa include colori, linee di contorno ed etichette e ombreggiature prospettiche. Alcune strade ed etichette sono visibili. Supporta l'impostazione della combinazione di colori della mappa su scura o chiara oppure in modo da rispettare le impostazioni di sistema.
Nessun valore
Valore: kGMSTypeNone
Nessun riquadro mappa. I riquadri della mappa base non verranno visualizzati. Questa modalità è utile insieme ai livelli di 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 riportato di seguito mostra un confronto tra rilievi, mappe normali e ibride per la stessa località:

Mappe di interni

A livelli di zoom elevati, Maps SDK per iOS mostra le planimetrie di spazi interni come aeroporti, centri commerciali, grandi negozi e stazioni di trasporto pubblico. Le planimetrie di interni sono integrate nei riquadri della mappa predefiniti per il tipo di mappa "normale" (kGMSTypeNormal) e vengono attivate automaticamente quando l'utente aumenta lo zoom e spariscono quando la mappa viene diminuita.

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 del piano.

Aggiunta di planimetrie

Le planimetrie sono disponibili in determinate località. Se i dati relativi alle planimetrie non sono disponibili per un edificio che desideri evidenziare nella tua applicazione, puoi:

  • Aggiungi planimetrie direttamente a Google Maps. In questo modo i tuoi piani sono disponibili per tutti gli utenti di Google Maps.
  • Mostra la pianta di un piano come overlay al suolo. In questo modo solo gli utenti della tua applicazione possono vedere le tue planimetrie.

Livello di traffico

Puoi offrire agli utenti la possibilità di visualizzare la mappa con informazioni sulla densità del traffico sovrapposte. 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 essere visualizzato il livello di traffico su una mappa.

Una mappa Google che mostra
il livello di traffico

Accessibilità

Per impostazione predefinita, gli elementi di accessibilità sulla mappa sono nascosti. Puoi abilitare l'accessibilità impostando la proprietà accessibilityElementsHidden di GMSMapView su NO. In questo modo vengono generati elementi di accessibilità per gli oggetti overlay (come GMSMarker e finestre informative, GMSPolyline e così via).

Swift

mapView.accessibilityElementsHidden = false
      

Objective-C

mapView.accessibilityElementsHidden = NO;
      

Questa proprietà è conforme al protocollo informale UIAccessibility, ad eccezione del fatto che il valore predefinito in Maps SDK for iOS è YES.

La mia località

Per impostazione predefinita, i dati sulla posizione non vengono mostrati sulla mappa. 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 attuale 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

Per molte città, viste da vicino, gli edifici in 3D saranno visibili, come puoi vedere nell'immagine di Seattle, Washington riportata di seguito.

Una mappa 3D di edifici a Seattle, Washington.

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 mappa

Una mappa di Google è progettata per riempire l'intera regione definita dall'GMSMapView. Le dimensioni della vista definiscono diversi aspetti dell'aspetto e del comportamento della mappa:

  • L'obiettivo della fotocamera riflette il centro dell'area imbottita.
  • I controlli della mappa sono posizionati rispetto ai bordi della mappa.
  • Le informazioni legali, come le dichiarazioni sul copyright o il logo di Google, vengono visualizzate sul bordo inferiore della mappa.

Puoi aggiungere spaziatura interna intorno ai bordi della mappa utilizzando l'GMSMapView.Proprietà padding. La mappa continua a riempire l'intero contenitore, ma il posizionamento di testo e controlli, i gesti della mappa e i movimenti della videocamera si comportano come se fosse stato collocato in uno spazio più piccolo. Ciò comporta le seguenti modifiche:

  • I movimenti della fotocamera mediante le chiamate API o la pressione dei pulsanti (ad es. bussola, la mia posizione) sono relativi all'area riempita.
  • GMSMapView.projection restituisce una proiezione che include solo la regione riempita.
  • I controlli UI sono spostati dal bordo del container in base al numero di punti specificato.

La spaziatura interna può essere utile quando si progettano UI che si sovrappongono a una parte della mappa. Ad esempio, nell'immagine, la mappa è riempita lungo i bordi superiore e destro. I controlli della mappa visibili e il testo legale vengono visualizzati lungo i bordi dell'area riempita in verde, mentre la mappa continua a riempire l'intero container, indicato in blu. In questo esempio, puoi far scorrere un menu sul lato destro della mappa senza nascondere i controlli.

Spaziatura interna mappa

Per aggiungere spaziatura interna alla mappa, crea un oggetto UIEdgeInsets e passalo a GMSMapView.padding proprietà.

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 rilievo, puoi impostare la combinazione di colori della mappa su scura o chiara oppure utilizzare le impostazioni di sistema correnti. Ad esempio, puoi scurire o schiarire la combinazione di colori della mappa in base all'ora del giorno o all'utilizzo al chiuso o all'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;