Utilizzare Google Maps in Android

Visualizzare le mappe nelle nostre applicazioni tramite le Google Maps Android API con gli oggetti MapFragment e MapView e personalizzare le mappe con Polyline e Marker

Per poter visualizzare delle mappa su Android si possono utilizzare le Google Maps Android API che consentono di aggiungere delle mappe ad un’applicazione senza preoccuparsi di gestire l’accesso ai server di Google, di dover scaricare le mappe e di gestire l’interazione con l’utente. Non solo, grazie a queste API che ci consentono di utilizzare Google Maps nelle nostre app, l’utente potrà visualizzare diversi tipi di mappa (normale, ibrida, satellite e topografica) ed eseguire qualsiasi altra operazione su Android che è abituato a fare con Google Maps.

Per poter utilizzare Google Maps su Android occorre ottenere un’API Key ottenibile gratuitamente sul sito ufficiale di Google e richiedere i permessi nel manifesto di INTERNET, ACCESS_NETWORK_STATE e WRITE_EXTERNAL_STORAGE (quest’ultimo viene utilizzato per usare lo storage esterno come cache). Per utilizzare una mappa in Android occorre utilizzare la classe GoogleMap che può essere rappresentata tramite un MapFragment o un oggetto di tipo MapView. Un MapFragment consente di aggiungere una mappa in un Fragment di Android come contenitore per l’oggetto GoogleMap, mentre una MapView è una sottoclasse della classe View che consente di inserire la mappa in una Android View. Infine bisogna implementare l’interfaccia OnMapReadyCallback e utilizzare il metodo di callback onMapReady(GoogleMap) per ottenere un handle all’oggetto GoogleMap in modo da poter interagire con la mappa ed inserire marcatori e segmenti. Visualizzare una mappa in Android è un processo dispendioso per questo motivo è consigliato di fermare e riprendere la mappa insieme al ciclo di vita dell’attività nei metodi onResume() e onPause().

Android MapRoute

Per poter personalizzare una mappa vengono messi a disposizione degli oggetti che prendono il nome di shapes e possono essere:

  • Polyline: costituito da una serie di segmenti collegati tra di loro;
  • Polygon: un’aria chiusa su una mappa utilizzata per indicare un’aria geografica;
  • Circle: un circonferenza per indicare un raggio d’azione.

Per poter disegnare un percorso su una mappa di Android vengono utilizzati gli oggetti Polyline, ogni oggetto di questo tipo è costituito da una serie di posizioni LatLng (latitudine e longitudine) ed ha associato una PolylineOptions che consente di aggiungere nuovi punti o di personalizzare l’aspetto della polilinea (colore, spessore, ecc.). Il compito dello sviluppatore che utilizza le API di Google Maps sarà inviare queste informazioni all’api e sarà Maps a disegnare il percorso sulla mappa.

Per segnalare dei luoghi di interesse possono essere utilizzati dei Marker che vengono aggiunti alla mappa tramite il metodo addMarker(), mentre l’oggetto MarkerOptions consente di personalizzare il marcatore come l’icona da mostrare.

Ecco un esempio di come implementare la classe OnMapReadyCallback per la gestione delle mappe in Android tratto dalla guida ufficiale di Google.

  public class MapPane extends Activity implements OnMapReadyCallback {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.map_activity);

      MapFragment mapFragment = (MapFragment) getFragmentManager()
        .findFragmentById(R.id.map);
      mapFragment.getMapAsync(this);
    }

    @Override
    public void onMapReady(GoogleMap map) {
      LatLng sydney = new LatLng(-33.867, 151.206);

      map.setMyLocationEnabled(true);
      map.moveCamera(CameraUpdateFactory.newLatLngZoom(sydney, 13));

      map.addMarker(new MarkerOptions()
        .title("Sydney")
        .snippet("The most populous city in Australia.")
        .position(sydney));
    }
  }

Ed ecco un esempio di layout XML per un MapFragment:

    <?xml version="1.0" encoding="utf-8"?>
        <fragment xmlns:android="http://schemas.android.com/apk/res/android"
            android:name="com.google.android.gms.maps.MapFragment"
            android:id="@+id/map"
            android:layout_width="match_parent"
            android:layout_height="match_parent"/>

Mentre un oggetto di tipo MapView sarà definito nell’XML in questo modo:

    <com.google.android.gms.maps.MapView android:id="@+id/myMapview"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

Indice:

Per approfondire Android ecco la guida completa completa: Guida Android.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *