Overlay del suolo

Seleziona la piattaforma: Android iOS JavaScript

I ground overlay sono overlay immagine associati a coordinate di latitudine/longitudine, quindi si spostano quando trascini o aumenti/diminuisci lo zoom della mappa.

Esempi di codice

Il repository ApiDemos su GitHub include un esempio che mostra i ground overlay:

Introduzione

Un ground overlay è un'immagine fissa su una mappa. A differenza dei indicatori, i ground overlay sono orientati verso la superficie terrestre anziché verso lo schermo, quindi la rotazione, l'inclinazione o lo zoom della mappa cambieranno l'orientamento dell'immagine. I ground overlay sono utili quando vuoi fissare una singola immagine in un'area della mappa. Se vuoi aggiungere immagini estese che coprono una parte significativa della mappa, valuta la possibilità di utilizzare un overlay riquadro.

Aggiungere un overlay

Per aggiungere un GroundOverlay, crea un GroundOverlayOptions oggetto che definisca sia un immagine sia una posizione. Facoltativamente, puoi specificare impostazioni aggiuntive che influiranno sul posizionamento dell'immagine sulla mappa. Una volta definite le opzioni necessarie, passa l'oggetto al metodo GoogleMap.addGroundOverlay() per aggiungere l'immagine alla mappa. Il metodo addGroundOverlay() restituisce un GroundOverlay oggetto; devi conservare un riferimento a questo oggetto se vuoi modificarlo in un secondo momento.

Procedura passo passo:

  1. Crea un'istanza di un nuovo oggetto GroundOverlayOptions
  2. Specifica l'immagine come BitmapDescriptor.
  3. Imposta la posizione dell'immagine utilizzando uno dei metodi disponibili:
    • position(LatLng location, float width, float height)
    • position(LatLng location, float width)
    • positionFromBounds(LatLngBounds bounds)
  4. Imposta le proprietà facoltative, ad esempio transparency, come preferisci.
  5. Chiama GoogleMap.addGroundOverlay() per aggiungere l'immagine alla mappa.

L'esempio seguente mostra come aggiungere un ground overlay a un oggetto GoogleMap esistente.

Kotlin

val newarkLatLng = LatLng(40.714086, -74.228697)
val newarkMap = GroundOverlayOptions()
    .image(BitmapDescriptorFactory.fromResource(R.drawable.newark_nj_1922))
    .position(newarkLatLng, 8600f, 6500f)
map.addGroundOverlay(newarkMap)

      

Java

LatLng newarkLatLng = new LatLng(40.714086, -74.228697);

GroundOverlayOptions newarkMap = new GroundOverlayOptions()
    .image(BitmapDescriptorFactory.fromResource(R.drawable.newark_nj_1922))
    .position(newarkLatLng, 8600f, 6500f);
map.addGroundOverlay(newarkMap);

      

Se vuoi modificare o rimuovere un ground overlay dopo averlo aggiunto alla mappa, assicurati di conservare l'oggetto GroundOverlay. Puoi modificare l'overlay in un secondo momento apportando modifiche a questo oggetto.

Kotlin

// Add an overlay to the map, retaining a handle to the GroundOverlay object.
val imageOverlay = map.addGroundOverlay(newarkMap)

      

Java

// Add an overlay to the map, retaining a handle to the GroundOverlay object.
GroundOverlay imageOverlay = map.addGroundOverlay(newarkMap);

      

Rimuovere un overlay

Puoi rimuovere un ground overlay con il GroundOverlay.remove() metodo.

Kotlin

imageOverlay?.remove()

      

Java

imageOverlay.remove();

      

Modificare un overlay

Puoi modificare l'immagine del ground overlay dopo averla aggiunta alla mappa con il metodo GroundOverlay.setImage(BitmapDescriptor).

Kotlin

// Update the GroundOverlay with a new image of the same dimension
imageOverlay?.setImage(BitmapDescriptorFactory.fromResource(R.drawable.newark_nj_1922))

      

Java

// Update the GroundOverlay with a new image of the same dimension
imageOverlay.setImage(BitmapDescriptorFactory.fromResource(R.drawable.newark_nj_1922));

      

Il metodo setImage() sostituirà l'immagine esistente con un'altra immagine delle stesse dimensioni.

Posizionare un ground overlay

Esistono due modi per specificare la posizione del ground overlay:

  • Utilizzando un LatLng per centrare l'overlay e le dimensioni in metri per specificare le dimensioni dell'immagine.
  • Utilizzando un LatLngBounds per specificare gli angoli nord-est e sud-ovest dell'immagine.

Devi specificare la posizione del ground overlay prima di aggiungerlo alla mappa.

Utilizzare la posizione per posizionare un'immagine

Quando aggiungi l'immagine, specifichi un LatLng a cui verrà fissato l'ancoraggio e la larghezza dell'overlay (in metri). Per impostazione predefinita, il anchor è il centro del l'immagine. Facoltativamente, puoi fornire l'altezza dell'overlay (in metri). Se non fornisci l'altezza dell'overlay, verrà calcolata automaticamente per mantenere le proporzioni dell'immagine.

Il codice riportato di seguito posiziona un'immagine nella posizione 40.714086, -74.228697 con una larghezza di 8,6 km e un'altezza di 6,5 km. L'immagine è ancorata in basso a sinistra.

Kotlin

val newarkMap = GroundOverlayOptions()
    .image(BitmapDescriptorFactory.fromResource(R.drawable.newark_nj_1922))
    .anchor(0f, 1f)
    .position(LatLng(40.714086, -74.228697), 8600f, 6500f)

      

Java

GroundOverlayOptions newarkMap = new GroundOverlayOptions()
    .image(BitmapDescriptorFactory.fromResource(R.drawable.newark_nj_1922))
    .anchor(0, 1)
    .position(new LatLng(40.714086, -74.228697), 8600f, 6500f);

      

Utilizzare LatLngBounds per posizionare un'immagine

Fornisci un LatLngBounds che contiene l'immagine. Il LatLngBounds imposta gli angoli nord-est e sud-ovest dell'immagine. Quando l'immagine viene disegnata sulla mappa, viene ruotata per adattarsi ai limiti. Se i limiti non corrispondono alle proporzioni originali, l'immagine verrà distorta.

Il codice riportato di seguito posiziona un'immagine sulla mappa con l'angolo sud-ovest vincolato a 40.712216,-74.22655 e l'angolo nord-est vincolato a 40.773941, -74.12544.

Kotlin

val newarkBounds = LatLngBounds(
    LatLng(40.712216, -74.22655),  // South west corner
    LatLng(40.773941, -74.12544)   // North east corner
)
val newarkMap = GroundOverlayOptions()
    .image(BitmapDescriptorFactory.fromResource(R.drawable.newark_nj_1922))
    .positionFromBounds(newarkBounds)

      

Java

LatLngBounds newarkBounds = new LatLngBounds(
    new LatLng(40.712216, -74.22655),       // South west corner
    new LatLng(40.773941, -74.12544));      // North east corner
GroundOverlayOptions newarkMap = new GroundOverlayOptions()
    .image(BitmapDescriptorFactory.fromResource(R.drawable.newark_nj_1922))
    .positionFromBounds(newarkBounds);

      

Associare i dati a un ground overlay

Puoi chiamare GroundOverlay.setTag() per archiviare un oggetto dati arbitrario con un ground overlay e recuperare l'oggetto dati utilizzando GroundOverlay.getTag().

Il seguente esempio di codice archivia una descrizione stringa con un ground overlay:

Kotlin

val sydneyGroundOverlay = map.addGroundOverlay(
    GroundOverlayOptions()
        .image(BitmapDescriptorFactory.fromResource(R.drawable.harbour_bridge))
        .position(LatLng(-33.873, 151.206), 100f)
        .clickable(true)
)
sydneyGroundOverlay?.tag = "Sydney"

      

Java

GroundOverlay sydneyGroundOverlay = map.addGroundOverlay(new GroundOverlayOptions()
    .image(BitmapDescriptorFactory.fromResource(R.drawable.harbour_bridge))
    .position(new LatLng(-33.873, 151.206), 100)
    .clickable(true));

sydneyGroundOverlay.setTag("Sydney");

      

Di seguito sono riportati alcuni esempi di scenari in cui è utile archiviare e recuperare i dati con i ground overlay:

  • La tua app potrebbe supportare diversi ground overlay e vuoi trattarli in modo diverso quando l'utente fa clic su di essi.
  • Potresti interfacciarti con un sistema che ha identificatori di record univoci, in cui gli overlay rappresentano record specifici in quel sistema.
  • I dati dell'overlay possono indicare una priorità per determinare lo z-index dell'overlay.

Gestire gli eventi dei ground overlay

Per impostazione predefinita, i ground overlay non sono cliccabili. Puoi attivare e disattivare la cliccabilità chiamando GroundOverlay.setClickable(boolean).

Utilizza un OnGroundOverlayClickListener per ascoltare gli eventi di clic su un ground overlay cliccabile. Per impostare questo listener sulla mappa, chiama GoogleMap.setOnGroundOverlayClickListener(OnGroundOverlayClickListener). Quando un utente fa clic su un ground overlay, riceverai un callback onGroundOverlayClick(GroundOverlay).