Configurare una mappa

Mantieni tutto organizzato con le raccolte Salva e classifica i contenuti in base alle tue preferenze.

Seleziona piattaforma: Android iOS

Questo argomento descrive come configurare una mappa che è stata aggiunta a un'app per iOS utilizzando l'SDK Maps per iOS.

Panoramica

Dopo aver aggiunto una mappa all'app, puoi configurare le impostazioni iniziali e di runtime della mappa. Per dettagli sull'aggiunta di un contenitore della mappa, consulta la sezione Aggiungere una mappa.

Le impostazioni iniziali della mappa includono:

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

Tipi di mappe

Puoi personalizzare la mappa con uno di diversi tipi. Il tipo di una mappa regola la rappresentazione complessiva della mappa. Ad esempio, un atlante contiene in genere mappe politiche incentrate sulla visualizzazione dei confini e mappe stradali che mostrano tutte le strade di una città o di un'area geografica. L'SDK Maps per iOS offre i seguenti tipi di mappe:

Tipo di mappa
Normale
Valore: kGMSTypeNormal
Mappa stradale standard. Mostra strade, alcuni elementi realizzati dagli esseri umani e importanti caratteristiche naturali come i fiumi. Sono visibili anche le etichette di strade e caratteristiche.
Ambiente ibrido
Valore: kGMSTypeHybrid
Dati delle fotografie satellitari aggiunti alle mappe stradali. Sono visibili anche le etichette della strada e dell'elemento.
Satellite
Valore: kGMSTypeSatellite
Dati delle fotografie satellitari. Le etichette della strada e degli elementi non sono visibili.
Rilievo
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 di base non verranno visualizzati. Questa modalità è utile in combinazione con i livelli di riquadri. La visualizzazione dei dati sul traffico sarà 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 camera = GMSCameraPosition.camera(withLatitude: -33.8683, longitude: 151.2086, zoom: 6)
let mapView = GMSMapView.map(withFrame: .zero, camera: camera)
mapView.mapType = .satellite
      

Objective-C

GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:-33.8683
                                                        longitude:151.2086
                                                             zoom:6];
GMSMapView *mapView = [GMSMapView mapWithFrame:CGRectZero camera:camera];
mapView.mapType = kGMSTypeSatellite;
      

Il selettore di seguito mostra un confronto tra rilievi, mappe normali e ibride per la stessa località:

Mappe di interni

A livelli di zoom elevati, l'SDK Maps per iOS mostra le planimetrie di spazi interni come aeroporti, centri commerciali, grandi negozi e stazioni di transito. Le planimetrie di 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 viene diminuita.

Puoi disattivare le mappe interne 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.

Aggiungere planimetrie

Le planimetrie sono disponibili in alcune località. Se i dati della planimetria non sono disponibili per un edificio che vuoi mettere in evidenza nella tua applicazione, puoi:

  • Aggiungere direttamente le planimetrie a Google Maps. In questo modo, i piani saranno disponibili per tutti gli utenti di Google Maps.
  • Mostra una planimetria come un overlay del suolo. Ciò consentirà solo agli utenti della tua applicazione di visualizzare le tue planimetrie.

Livello di traffico

Puoi consentire agli utenti di visualizzare la mappa con informazioni sulla densità di traffico sovrapposte. Fornisce un riepilogo visivo della situazione del traffico locale. Puoi attivare e disattivare il livello del traffico chiamando il metodo trafficEnabled. L'esempio seguente mostra come potrebbe apparire il livello 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. Di conseguenza, gli elementi di accessibilità verranno generati per gli oggetti in overlay (ad esempio GMSMarker e finestre informative GMSPolyline ecc.).

Swift

mapView.accessibilityElementsHidden = false
      

Objective-C

mapView.accessibilityElementsHidden = NO;
      

Questa proprietà segue il protocollo UIAccessibility informale, ad eccezione del fatto che il valore predefinito nell'SDK di Maps per iOS è YES.

La mia posizione

Per impostazione predefinita, sulla mappa non vengono mostrati dati sulla posizione. Puoi attivare il punto blu "La mia posizione" e la direzione 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 anche tramite la proprietà myLocation. Questa proprietà potrebbe non essere immediatamente disponibile, ad esempio se iOS richiede all'utente di consentire l'accesso a questi dati. In questo caso sarà nullo.

Swift

print("User's location: \(String(describing: mapView.myLocation))")
      

Objective-C

NSLog(@"User's location: %@", mapView.myLocation);
      

Edifici 3D

Molte città, se osservate da vicino, hanno edifici 3D visibili, come nell'immagine di Seattle, Washington sotto.

Una mappa 3D degli edifici a Seattle, Washington.

Puoi disattivare gli edifici 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 Maps è progettata per riempire l'intera regione definita da GMSMapView. Le dimensioni della vista definiscono vari aspetti del modo in cui la mappa viene visualizzata e si comporta:

  • Il target della videocamera rifletterà il centro della regione imbottita.
  • I controlli mappa sono posizionati in base 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 una spaziatura interna intorno ai bordi della mappa utilizzando GMSMapView.padding. La mappa continuerà a riempire l'intero contenitore, ma il posizionamento del testo e dei controlli, i gesti delle mappe e i movimenti della videocamera si comporteranno come se fossero stati posizionati in uno spazio più piccolo. Questo comporta le seguenti modifiche:

  • I movimenti della videocamera tramite chiamate API o pressioni di pulsanti (ad esempio bussola, la mia posizione) saranno relativi alla regione imbottita.
  • GMSMapView.projection restituirà una proiezione che include solo l'area geografica riempita.
  • I controlli dell'interfaccia utente verranno offset dal bordo del container in base al numero di punti specificato.

La spaziatura interna può essere utile nella progettazione di interfacce utente che si sovrappongono ad alcune parti della mappa. Ad esempio, nell'immagine seguente, la mappa viene riempita lungo i bordi superiore e destro. I controlli e il testo legale visibili della mappa verranno visualizzati lungo i bordi della regione imbottita, mostrata in verde, mentre la mappa continuerà a riempire l'intero contenitore, mostrata in blu. In questo esempio, puoi rendere mobile un menu sul lato destro della mappa senza oscurare i controlli della mappa.

Spaziatura interna mappa

Per aggiungere una spaziatura interna 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;