Android - Google Maps

Android ci permette di integrare google maps nella nostra applicazione. Puoi mostrare qualsiasi posizione sulla mappa, o puoi mostrare diversi percorsi sulla mappa ecc. Puoi anche personalizzare la mappa in base alle tue scelte.

Google Map - File di layout

Ora devi aggiungere il frammento di mappa nel file di layout xml. La sua sintassi è data di seguito:

<fragment
   android:id="@+id/map"
   android:name="com.google.android.gms.maps.MapFragment"
   android:layout_width="match_parent"
   android:layout_height="match_parent"/>

Google Map - File AndroidManifest

La prossima cosa che devi fare è aggiungere alcune autorizzazioni insieme alla chiave API di Google Map nel file AndroidManifest.XML. La sua sintassi è data di seguito:

<!--Permissions-->

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="com.google.android.providers.gsf.permission.
   READ_GSERVICES" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

<!--Google MAP API key-->

<meta-data
   android:name="com.google.android.maps.v2.API_KEY"
   android:value="AIzaSyDKymeBXNeiFWY5jRUejv6zItpmr2MVyQ0" />

Personalizzazione di Google Map

Puoi facilmente personalizzare la mappa di Google dalla sua visualizzazione predefinita e modificarla in base alle tue esigenze.

Aggiunta di marker

Puoi posizionare un creatore con del testo sopra che mostra la tua posizione sulla mappa. Può essere fatto tramiteaddMarker()metodo. La sua sintassi è data di seguito:

final LatLng TutorialsPoint = new LatLng(21 , 57);
Marker TP = googleMap.addMarker(new MarkerOptions()
   .position(TutorialsPoint).title("TutorialsPoint"));

Modifica del tipo di mappa

È inoltre possibile modificare il tipo di MAPPA. Esistono quattro diversi tipi di mappa e ognuno offre una visualizzazione diversa della mappa. Questi tipi sono Normale, Ibrido, Satellite e Terreno. Puoi usarli come di seguito

googleMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
googleMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);
googleMap.setMapType(GoogleMap.MAP_TYPE_SATELLITE);
googleMap.setMapType(GoogleMap.MAP_TYPE_TERRAIN);

Abilita / Disabilita lo zoom

Puoi anche abilitare o disabilitare i gesti di zoom nella mappa chiamando il setZoomControlsEnabled(boolean)metodo. La sua sintassi è data di seguito:

googleMap.getUiSettings().setZoomGesturesEnabled(true);

Oltre a queste personalizzazioni, ci sono altri metodi disponibili nella classe GoogleMap, che ti aiutano a personalizzare maggiormente la mappa. Sono elencati di seguito:

Suor n Metodo e descrizione
1

addCircle(CircleOptions options)

Questo metodo aggiunge un cerchio alla mappa

2

addPolygon(PolygonOptions options)

Questo metodo aggiunge un poligono alla mappa

3

addTileOverlay(TileOverlayOptions options)

Questo metodo aggiunge la sovrapposizione di tessere alla mappa

4

animateCamera(CameraUpdate update)

Questo metodo sposta la mappa in base all'aggiornamento con un'animazione

5

clear()

Questo metodo rimuove tutto dalla mappa.

6

getMyLocation()

Questo metodo restituisce la posizione dell'utente attualmente visualizzata.

7

moveCamera(CameraUpdate update)

Questo metodo riposiziona la telecamera secondo le istruzioni definite nell'aggiornamento

8

setTrafficEnabled(boolean enabled)

Questo metodo attiva o disattiva il livello del traffico.

9

snapshot(GoogleMap.SnapshotReadyCallback callback)

Questo metodo acquisisce un'istantanea della mappa

10

stopAnimation()

Questo metodo interrompe l'animazione della telecamera se ce n'è una in corso

Esempio

Ecco un esempio che dimostra l'uso della classe GoogleMap. Crea un'applicazione M di base che ti consente di navigare attraverso la mappa.

Per sperimentare questo esempio, puoi eseguirlo su un dispositivo reale o in un emulatore.

Crea un progetto con l'attività di Google Maps come mostrato di seguito -

Si aprirà la seguente schermata e copierà l'URL della console per la chiave API come mostrato di seguito:

Copia questo e incollalo nel tuo browser. Verrà visualizzata la seguente schermata:

Fare clic su continua e fare clic su Crea chiave API, quindi verrà visualizzata la schermata seguente

Ecco il contenuto di activity_main.xml.

<fragment xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:map="http://schemas.android.com/apk/res-auto"
   xmlns:tools="http://schemas.android.com/tools"
   android:id="@+id/map"
   android:name="com.google.android.gms.maps.SupportMapFragment"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   tools:context="com.example.tutorialspoint7.myapplication.MapsActivity" />

Ecco il contenuto di MapActivity.java.

Nel codice seguente abbiamo fornito dettagli di latitudine e longitudine di esempio
package com.example.tutorialspoint7.myapplication;

import android.support.v4.app.FragmentActivity;
import android.os.Bundle;

import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;

public class MapsActivity extends FragmentActivity implements OnMapReadyCallback {

   private GoogleMap mMap;

   @Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_maps);
      // Obtain the SupportMapFragment and get notified when the map is ready to be used.
      SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
         .findFragmentById(R.id.map);
      mapFragment.getMapAsync(this);
   }
   
   /**
      * Manipulates the map once available.
      * This callback is triggered when the map is ready to be used.
      * This is where we can add markers or lines, add listeners or move the camera.
      * In this case, we just add a marker near Sydney, Australia.
      * If Google Play services is not installed on the device. 
      * This method will only be triggered once the user has installed 
         Google Play services and returned to the app.
   */
  
   @Override
   public void onMapReady(GoogleMap googleMap) {
      mMap = googleMap;
      // Add a marker in Sydney and move the camera
      LatLng TutorialsPoint = new LatLng(21, 57);
      mMap.addMarker(new 
         MarkerOptions().position(TutorialsPoint).title("Tutorialspoint.com"));
      mMap.moveCamera(CameraUpdateFactory.newLatLng(TutorialsPoint));
   }
}

Di seguito è riportato il contenuto di AndroidManifest.xml file.

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.tutorialspoint7.myapplication">

   <!--
      The ACCESS_COARSE/FINE_LOCATION permissions are not required to use
      Google Maps Android API v2, but you must specify either coarse or fine
      location permissions for the 'MyLocation' functionality. 
   -->
    
   <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
   <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
   <uses-permission android:name="android.permission.INTERNET" />
   <application
      android:allowBackup="true"
      android:icon="@mipmap/ic_launcher"
      android:label="@string/app_name"
      android:supportsRtl="true"
      android:theme="@style/AppTheme">

      <!--
         The API key for Google Maps-based APIs is defined as a string resource.
         (See the file "res/values/google_maps_api.xml").
         Note that the API key is linked to the encryption key used to sign the APK.
         You need a different API key for each encryption key, including the release key 
         that is used to sign the APK for publishing.
         You can define the keys for the debug and 
            release targets in src/debug/ and src/release/. 
      -->
      
      <meta-data
         android:name="com.google.android.geo.API_KEY"
         android:value="AIzaSyAXhBdyKxUo_cb-EkSgWJQTdqR0QjLcqes" />

      <activity
         android:name=".MapsActivity"
         android:label="@string/title_activity_maps">
         <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
         </intent-filter>
      </activity>
   </application>

</manifest>

L'output dovrebbe essere così -