<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="es">
	<id>https://manuais.iessanclemente.net/index.php?action=history&amp;feed=atom&amp;title=PDM_Avanzado_GoogleMaps</id>
	<title>PDM Avanzado GoogleMaps - Historial de revisiones</title>
	<link rel="self" type="application/atom+xml" href="https://manuais.iessanclemente.net/index.php?action=history&amp;feed=atom&amp;title=PDM_Avanzado_GoogleMaps"/>
	<link rel="alternate" type="text/html" href="https://manuais.iessanclemente.net/index.php?title=PDM_Avanzado_GoogleMaps&amp;action=history"/>
	<updated>2026-10-21T14:59:19Z</updated>
	<subtitle>Historial de revisiones de esta página en la wiki</subtitle>
	<generator>MediaWiki 1.46.2</generator>
	<entry>
		<id>https://manuais.iessanclemente.net/index.php?title=PDM_Avanzado_GoogleMaps&amp;diff=53964&amp;oldid=prev</id>
		<title>Angelfg: /* Obtención da API KEY */</title>
		<link rel="alternate" type="text/html" href="https://manuais.iessanclemente.net/index.php?title=PDM_Avanzado_GoogleMaps&amp;diff=53964&amp;oldid=prev"/>
		<updated>2015-03-13T08:27:51Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Obtención da API KEY&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Página nueva&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==Introdución==&lt;br /&gt;
&lt;br /&gt;
Neste punto imos aprender como debuxar e controlar un Mapa de GoogleMaps.&lt;br /&gt;
&lt;br /&gt;
Debido a que o control que debuxa o mapa fai uso dun [http://developer.android.com/reference/com/google/android/gms/maps/MapFragment.html MapFragment] e esta clase foi introducida a partires da API 12 (Android 3.1) teremos dúas formas de utilizalo dependendo da API mínima ó que vaia dirixida a nosa aplicación.&lt;br /&gt;
&lt;br /&gt;
Para poder utilizar un Google Map necesitaremos:&lt;br /&gt;
&lt;br /&gt;
* Google Play services (a aplicación debe estar instalada no dispositivo real. Isto xa se fai automaticamente a partires da versión 2.3).&lt;br /&gt;
* Google Maps API key: Unha clave que nos proporciona Google e que ten estar posta no AndroidManifiest.xml. Para ser exactos imos necesitar dúas. Unha para a versión de desenrolo e outra para cando xeremos o APK.&lt;br /&gt;
* Unha serie de permisos a engadir no AndroidManifiest.xml&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Aclaración sobre o dispositivo virtual android (AVD)===&lt;br /&gt;
&lt;br /&gt;
Para poder utilizar o mapa nun AVD é necesario descargar unha imaxe que sexa Google API.&lt;br /&gt;
&lt;br /&gt;
[[Imagen:PDM_Avanzada_GoogleMap_17.jpg|500px|center]]&lt;br /&gt;
&lt;br /&gt;
Unha vez descargada e tendo un AVD con esta imaxe, teremos que cambiar as propiedades do proxecto para indicarlle que imos utilizar dita imaxe:&lt;br /&gt;
&lt;br /&gt;
[[Imagen:PDM_Avanzada_GoogleMap_18.jpg|500px|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
No caso de utilizar a máquina de VirtualBox entregada para este curso, isto non será necesario.&lt;br /&gt;
&lt;br /&gt;
==Importación de Google Play Services ó noso proxecto==&lt;br /&gt;
&lt;br /&gt;
Debemos de engadir a librería de Google Play Services ó noso proxecto.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;u&amp;gt;Nota:&amp;lt;/u&amp;gt; Se usades Android Studio [http://developer.android.com/google/play-services/setup.html neste enlace] indica como tedes que facer.&lt;br /&gt;
* &amp;lt;u&amp;gt;Nota:&amp;lt;/u&amp;gt; Nun AVD funcionará nunha versión Android 4.2.2 ou superior cunha imaxe Google API.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Para facelo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery caption=&amp;quot;Importación dos Google Play Services en Eclipse&amp;quot; widths=&amp;quot;350&amp;quot; heights=&amp;quot;300px&amp;quot; perrow=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
Image:PDM_Avanzada_GoogleMap_0.jpg | Primeiro abrimos o SDK Manager dende o Eclipse.&lt;br /&gt;
Image:PDM_Avanzada_GoogleMap_1.jpg| Marcamos a entrada Google Play Services (na imaxe xa está instalado).&lt;br /&gt;
Image:PDM_Avanzada_GoogleMap_2.jpg | Unha vez descargado pechamos e imos ó menú de Eclipse File =&amp;gt; Import. Escollemos a opción &amp;#039;Existing Android Code into Workspace&amp;#039;.&lt;br /&gt;
Image:PDM_Avanzada_GoogleMap_3.jpg| Prememos o botón Browse e imos a ruta: &amp;#039;&amp;#039;&amp;#039;&amp;lt;ruta-sdk&amp;gt;\extras\google\google_play_services\libproject\google-play-services_lib&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
Image:PDM_Avanzada_GoogleMap_4.jpg| Ó seleccionar o cartafol anterior aparecerá o proxecto &amp;#039;Google Play Services Lib&amp;#039;. Debemos seleccionar a opción de &amp;#039;Copy proyect to workspace&amp;#039;.&lt;br /&gt;
Image:PDM_Avanzada_GoogleMap_5.jpg| Agora nos situamos sobre &amp;#039;&amp;#039;&amp;#039;o noso proxecto (onde imos desenvolver a aplicación)&amp;#039;&amp;#039;&amp;#039; e prememos o botón dereito do rato escollendo a opción de &amp;#039;&amp;#039;&amp;#039;propiedades&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
Image:PDM_Avanzada_GoogleMap_6.jpg| Prememos sobre a opción de &amp;#039;Android&amp;#039; na parte esquerda e prememos o botón de &amp;#039;Add&amp;#039;.&lt;br /&gt;
Image:PDM_Avanzada_GoogleMap_7.jpg| Escollemos a librería Google Play Sercices.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A maiores debemos engadir o seguinte permiso no arquivo &amp;#039;&amp;#039;&amp;#039;AndroidManifiest.xml&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
&lt;br /&gt;
* Dentro da entrada &amp;lt;application&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot; line enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;7-9&amp;quot; &amp;gt;&lt;br /&gt;
    &amp;lt;application&lt;br /&gt;
        android:allowBackup=&amp;quot;true&amp;quot;&lt;br /&gt;
        android:icon=&amp;quot;@drawable/ic_launcher&amp;quot;&lt;br /&gt;
        android:label=&amp;quot;@string/app_name&amp;quot;&lt;br /&gt;
        android:theme=&amp;quot;@style/AppTheme&amp;quot; &amp;gt;&lt;br /&gt;
    &lt;br /&gt;
        &amp;lt;meta-data&lt;br /&gt;
            android:name=&amp;quot;com.google.android.gms.version&amp;quot;&lt;br /&gt;
            android:value=&amp;quot;@integer/google_play_services_version&amp;quot; /&amp;gt;&lt;br /&gt;
        ............&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Para saber por código se un dispositivo ten o Google Play Service:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;&amp;quot; &amp;gt;&lt;br /&gt;
int resultCode =GooglePlayServicesUtil.isGooglePlayServicesAvailable(this);&lt;br /&gt;
&lt;br /&gt;
if (ConnectionResult.SUCCESS != resultCode) {&lt;br /&gt;
&lt;br /&gt;
  // Neste caso ou non ten instalado o Google Play Services ou necesita actualizarse,...&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
En caso de erro podemos descubrir que pasa:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;&amp;quot; &amp;gt;&lt;br /&gt;
GooglePlayServicesUtil.getErrorDialog(resultCode, this, 0).show();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Xeración das API KEYS==&lt;br /&gt;
&lt;br /&gt;
Para poder utilizar un mapa de Google necesitamos xerar unha Key dende a consola de Google. Para ser máis concretos imos necesitar xerar dúas Keys, unha para facer procesos de debugger (cando estamos a desenrolar a aplicación en Eclipse) e outra xa definitiva para cando xeremos o APK que será entregado ou descargado polos usuarios da nosa aplicación.&lt;br /&gt;
&lt;br /&gt;
===Obtención da pegada dixital SHA1===&lt;br /&gt;
&lt;br /&gt;
Un paso necesario para obter esa Key é obter a pegada dixital. &lt;br /&gt;
&lt;br /&gt;
Como comentamos antes imos ter dúas, unha mentres estamos a desenrolar a aplicación e outra para cando teñamos a aplicación rematada e lista para entregar ós usuarios.&lt;br /&gt;
&lt;br /&gt;
====Obtención da pegada dixital SHA1 Depuración====&lt;br /&gt;
&lt;br /&gt;
=====Graficamente=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery caption=&amp;quot;Importación dos Google Play Services&amp;quot; widths=&amp;quot;350&amp;quot; heights=&amp;quot;300px&amp;quot; perrow=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
Image:PDM_Avanzada_GoogleMap_8.jpg| Imos o menú Window =&amp;gt; Preferences de Eclipse.&lt;br /&gt;
Image:PDM_Avanzada_GoogleMap_9.jpg| Copiamos a pegada SHA1.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Dende consola=====&lt;br /&gt;
&lt;br /&gt;
Esta información tamén se pode obter dende unha consola ou terminal. En Windows é mellor utilizar unha consola con permisos administrativos (executar como administrador).&lt;br /&gt;
&lt;br /&gt;
Debemos situarnos coa orde &amp;#039;&amp;#039;&amp;#039;cd&amp;#039;&amp;#039;&amp;#039; (se non o temos no path) no cartafol onde estea instalado o JDK e dentro deste no cartafol /bin/.&lt;br /&gt;
&lt;br /&gt;
Nese cartafol se atopa o executable keytool.&lt;br /&gt;
&lt;br /&gt;
* LINUX:&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;&amp;quot; &amp;gt;&lt;br /&gt;
./keytool -list -v -keystore ~/.android/debug.keystore -alias androiddebugkey -storepass android -keypass android&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* WINDOWS:&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;&amp;quot; &amp;gt;&lt;br /&gt;
keytool -list -v -keystore &amp;quot;%USERPROFILE%\.android\debug.keystore&amp;quot; -alias androiddebugkey -storepass android -keypass android&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Obtención da pegada dixital SHA1 Produción====&lt;br /&gt;
&lt;br /&gt;
Esta a obteremos cando a aplicación estea rematada e xeremos o apk a entregar ós usuarios.&lt;br /&gt;
&lt;br /&gt;
Esta parte está contemplada na [http://manuais.iessanclemente.net/index.php/PDM_Avanzado_Empaquetado_e_distribuci%C3%B3n#Obtendo_a_pegada_dixital_SHA1_dun_almac.C3.A9n Unidade de empaquetado e distribución].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Obtención da API KEY===&lt;br /&gt;
&lt;br /&gt;
Unha vez temos a pegada dixital, temos que acceder ó sitio web: https://code.google.com/apis/console/?noredirect&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Nota:&amp;lt;/u&amp;gt; Solicitará entrar cunha conta de gmail. Se non a temos teremos que rexistrarnos e crear unha nova.&lt;br /&gt;
&lt;br /&gt;
O proceso é o seguinte:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery caption=&amp;quot;Obtención da API KEY&amp;quot; widths=&amp;quot;400&amp;quot; heights=&amp;quot;400px&amp;quot; perrow=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
Image:PDM_Avanzada_GoogleMap_10.jpg| Debemos premer o botón de &amp;#039;&amp;#039;&amp;#039;Create Proyect&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
Image:PDM_Avanzada_GoogleMap_11.jpg| Na seguinte pantalla teremos que escoller na parte esquerda a opción de &amp;#039;&amp;#039;&amp;#039;Services&amp;#039;&amp;#039;&amp;#039; e na lista que aparece teremos que activar (premer onde pon off) o servizo &amp;#039;&amp;#039;&amp;#039;Google Maps Android API v2&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
Image:PDM_Avanzada_GoogleMap_12.jpg| Marcamos I Agree e prememos  o botón de Accept. Unha vez feito o servizo está iniciado.&lt;br /&gt;
Image:PDM_Avanzada_GoogleMap_13.jpg| Debemos marcar agora a opción da parte esquerda &amp;#039;&amp;#039;&amp;#039;API Access&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
Image:PDM_Avanzada_GoogleMap_14.jpg| Agora debemos premer o botón &amp;#039;&amp;#039;&amp;#039;Create new Android Key&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
Image:PDM_Avanzada_GoogleMap_15.jpg| Agora debemos copiar e pegar a pegada dixital (SHA1) obtida no punto anterior seguido por &amp;#039;;&amp;#039; e o nome do paquete do noso proxecto. Lembrar que o nome do paquete o tedes no AndroidManifiest.xml (&amp;lt;manifest xmlns:android=&amp;quot;http://schemas.android.com/apk/res/android&amp;quot;  package=&amp;quot;&amp;#039;&amp;#039;&amp;#039;com.platega.angel.diarodeviaxe&amp;#039;&amp;#039;&amp;#039;&amp;quot;). Podemos asociar varias aplicacións a mesma API KEY. Teremos que separar por unha nova liña (premer a tecla enter) e volver a escribir o SHA1;o_nome_do_paquete.&lt;br /&gt;
Image:PDM_Avanzada_GoogleMap_16.jpg| Agora no listado aparece a nova key.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;&amp;lt;u&amp;gt;Nota Importante:&amp;lt;/u&amp;gt;&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
:Lembrar que se queremos entregar a aplicación aos usuarios (xerar o APK) debemos de obter e utilizar a API KEY &amp;#039;&amp;#039;&amp;#039;a partires da SHA1 de produción&amp;#039;&amp;#039;&amp;#039;, como indicamos [http://manuais.iessanclemente.net/index.php/PDM_Avanzado_GoogleMaps#Obtenci.C3.B3n_da_pegada_dixital_SHA1_Produci.C3.B3n neste enlace].&lt;br /&gt;
&lt;br /&gt;
:O lóxico é que primeiro xeredes unha API KEY a partires do voso Eclipse (cando se está a facer probas). Como xa está xerada a API KEY o único que teredes que facer é editar quen ten acceso a utilizar esa api key premendo o botón &amp;#039;Editar Aplicaciones Android Permitidas&amp;#039;. Nese intre teredes que poñer o SHA1 obtido do voso almacén de claves ([http://manuais.iessanclemente.net/index.php/PDM_Avanzado_Empaquetado_e_distribuci%C3%B3n#Obtendo_a_pegada_dixital_SHA1_dun_almac.C3.A9n_para_utilizar_con_GoogleMap obtención da SHA1]).&lt;br /&gt;
&lt;br /&gt;
==Permisos necesarios e uso da nova API KEY==&lt;br /&gt;
&lt;br /&gt;
Para poder utilizar GoogleMap debemos modificar o arquivo &amp;#039;&amp;#039;&amp;#039;AndroidManifiest.xml&amp;#039;&amp;#039;&amp;#039; coas seguintes entradas:&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Xusto antes da etiqueta &amp;lt;/application&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot; line enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;&amp;quot; &amp;gt;&lt;br /&gt;
...........&lt;br /&gt;
    &amp;lt;meta-data&lt;br /&gt;
       android:name=&amp;quot;com.google.android.maps.v2.API_KEY&amp;quot;&lt;br /&gt;
       android:value=&amp;quot;API_KEY&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/application&amp;gt;&lt;br /&gt;
...........&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
&lt;br /&gt;
: Tendo que substituír en value API_KEY pola API KEY xerada no paso anterior.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Debemos engadir os seguintes permisos:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot; line enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;&amp;quot; &amp;gt;&lt;br /&gt;
    &amp;lt;uses-permission android:name=&amp;quot;android.permission.INTERNET&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;uses-permission android:name=&amp;quot;android.permission.ACCESS_NETWORK_STATE&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;uses-permission android:name=&amp;quot;android.permission.WRITE_EXTERNAL_STORAGE&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Os seguintes permisos non son obrigatorios pero se recomendan utilizalos:&lt;br /&gt;
:&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot; line enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;&amp;quot; &amp;gt;&lt;br /&gt;
    &amp;lt;uses-permission android:name=&amp;quot;android.permission.ACCESS_FINE_LOCATION&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;uses-permission android:name=&amp;quot;android.permission.ACCESS_COARSE_LOCATION&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
&lt;br /&gt;
: O primeiro serve para permitir que se utilice o WIFI ou antenas móbiles para determinar a localización.&lt;br /&gt;
: O segundo serve para permitir que se utilice o GPS para determinar a localización.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* É necesario que a tarxeta gráfica soporte OPEN GL 2.0 para a renderización do mapa.&lt;br /&gt;
:&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot; line enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;&amp;quot; &amp;gt;&lt;br /&gt;
&amp;lt;uses-feature&lt;br /&gt;
        android:glEsVersion=&amp;quot;0x00020000&amp;quot;&lt;br /&gt;
        android:required=&amp;quot;true&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Renderizado do MAPA==&lt;br /&gt;
&lt;br /&gt;
Debemos crear un layout para a activity no que se visualizará o mapa.&lt;br /&gt;
&lt;br /&gt;
Aquí temos varias opcións:&lt;br /&gt;
&lt;br /&gt;
* Podemos facer que o mapa ocupe todo o layout:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot; line enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;&amp;quot; &amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;fragment xmlns:android=&amp;quot;http://schemas.android.com/apk/res/android&amp;quot;&lt;br /&gt;
          android:id=&amp;quot;@+id/map&amp;quot;&lt;br /&gt;
          android:layout_width=&amp;quot;match_parent&amp;quot;&lt;br /&gt;
          android:layout_height=&amp;quot;match_parent&amp;quot;&lt;br /&gt;
          android:name=&amp;quot;com.google.android.gms.maps.MapFragment&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Podemos facer que o mapa forme parte dun layout:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot; line enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;&amp;quot; &amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;RelativeLayout xmlns:android=&amp;quot;http://schemas.android.com/apk/res/android&amp;quot;&lt;br /&gt;
    xmlns:tools=&amp;quot;http://schemas.android.com/tools&amp;quot;&lt;br /&gt;
    android:layout_width=&amp;quot;match_parent&amp;quot;&lt;br /&gt;
    android:layout_height=&amp;quot;match_parent&amp;quot;&lt;br /&gt;
&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;fragment &lt;br /&gt;
          android:id=&amp;quot;@+id/map&amp;quot;&lt;br /&gt;
          android:layout_width=&amp;quot;match_parent&amp;quot;&lt;br /&gt;
          android:layout_height=&amp;quot;match_parent&amp;quot;&lt;br /&gt;
          android:name=&amp;quot;com.google.android.gms.maps.MapFragment&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/RelativeLayout&amp;gt; &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Unha vez definido o layout creamos a activity que o carga:&lt;br /&gt;
:&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;9&amp;quot; &amp;gt;&lt;br /&gt;
import android.app.Activity;&lt;br /&gt;
import android.os.Bundle;&lt;br /&gt;
&lt;br /&gt;
public class UD6_02_Mapa extends Activity {&lt;br /&gt;
&lt;br /&gt;
	@Override&lt;br /&gt;
	protected void onCreate(Bundle savedInstanceState) {&lt;br /&gt;
		super.onCreate(savedInstanceState);&lt;br /&gt;
		setContentView(R.layout.layout_anteriormente_definido);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Se facemos todos os pasos indicados teremos como resultado algo parecido a isto:&lt;br /&gt;
&lt;br /&gt;
[[Imagen:PDM_Avanzada_GoogleMap_19.jpg|400px|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Versións da API====&lt;br /&gt;
&lt;br /&gt;
Como podemos comprobar o mapa utiliza unha clase MapFragment para visualizarse.&lt;br /&gt;
&lt;br /&gt;
Esta clase foi introducida a partires da API 12 (Android 3.1). Se necesitamos desenrolar unha aplicación para unha versión anterior teremos que modificar o layout e poñer o seguinte:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot; line enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;&amp;quot; &amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;fragment xmlns:android=&amp;quot;http://schemas.android.com/apk/res/android&amp;quot;&lt;br /&gt;
          android:id=&amp;quot;@+id/map&amp;quot;&lt;br /&gt;
          android:layout_width=&amp;quot;match_parent&amp;quot;&lt;br /&gt;
          android:layout_height=&amp;quot;match_parent&amp;quot;&lt;br /&gt;
          android:name=&amp;quot;com.google.android.gms.maps.SupportMapFragment&amp;quot;/&amp;gt;&lt;br /&gt;
/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Neste caso a activity debe ser unha subclase da clase FragmentActivity que se atopa na librería de compatibilidade v4:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;2,4&amp;quot; &amp;gt;&lt;br /&gt;
import android.os.Bundle;&lt;br /&gt;
import android.support.v4.app.FragmentActivity;&lt;br /&gt;
&lt;br /&gt;
public class UD6_02_Mapa  extends FragmentActivity {&lt;br /&gt;
&lt;br /&gt;
	@Override&lt;br /&gt;
	protected void onCreate(Bundle savedInstanceState) {&lt;br /&gt;
		super.onCreate(savedInstanceState);&lt;br /&gt;
		setContentView(R.layout.activity_ud6_02_mapa);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Manexo do Mapa==&lt;br /&gt;
&lt;br /&gt;
Unha vez temos o mapa no layout podemos facer referencia a el dende a activity e modificar propiedades, facer zoom, mover a cámara...&lt;br /&gt;
&lt;br /&gt;
Faremos uso da [http://developer.android.com/reference/com/google/android/gms/maps/GoogleMap.html clase GoogleMap]:&lt;br /&gt;
&lt;br /&gt;
* Para referenciar o mapa:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;&amp;quot; &amp;gt;&lt;br /&gt;
import com.google.android.gms.maps.GoogleMap;&lt;br /&gt;
&lt;br /&gt;
private GoogleMap googleMap;&lt;br /&gt;
&lt;br /&gt;
googleMap = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Se necesitamos que o GoogleMap funcione en versións anteriores á API 12 (Android 3.1) teremos que refencialo desta forma, facendo uso da librería de compatibilidade v4:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;&amp;quot; &amp;gt;&lt;br /&gt;
import com.google.android.gms.maps.GoogleMap;&lt;br /&gt;
&lt;br /&gt;
private GoogleMap googleMap;&lt;br /&gt;
&lt;br /&gt;
googleMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map)).getMap();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Entre os métodos que podemos empregar:&lt;br /&gt;
&lt;br /&gt;
* setMapType(TIPO_MAPA): Cambio o tipo de mapa, sendo TIPO_MAPA:&lt;br /&gt;
:*GoogleMap.MAP_TYPE_TERRAIN&lt;br /&gt;
:*GoogleMap.MAP_TYPE_NORMAL&lt;br /&gt;
:*GoogleMap.MAP_TYPE_SATELLITE&lt;br /&gt;
:*GoogleMap.MAP_TYPE_HYBRID&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*moveCamera(TIPO_MOVEMENTO): Move a cámara directamente.&lt;br /&gt;
*animateCamera(TIPO_MOVEMENTO): Move a cámara cunha animación.&lt;br /&gt;
&lt;br /&gt;
:: sendo TIPO_MOVEMENTO:&lt;br /&gt;
::* CameraUpdateFactory.zoomIn(): Aumenta en 1 o zoom.&lt;br /&gt;
::* CameraUpdateFactory.zoomOut(): Diminúe en 1 o zoom.&lt;br /&gt;
::* CameraUpdateFactory.zoomTo(nivel_de_zoom): Nivel de zoom entre 2 e 21.&lt;br /&gt;
&lt;br /&gt;
::* CameraUpdateFactory.newLatLng(lat, long): Nova lonxitude e latitude.&lt;br /&gt;
::* CameraUpdateFactory.newLatLngZoom(lat, long, zoom): Nova lonxitude e latitude cun zoom determinado.&lt;br /&gt;
&lt;br /&gt;
::* CameraUpdateFactory.scrollBy(scrollHorizontal, scrollVertical): Fai un movemento en scroll desprezando o mapa o número de pixeles indicados.&lt;br /&gt;
&lt;br /&gt;
:: &amp;lt;u&amp;gt;Nota:&amp;lt;/u&amp;gt; Para mover a cámara ou cambiar o zoom faremos uso da [http://developer.android.com/reference/com/google/android/gms/maps/CameraUpdateFactory.html clase CameraUpdateFactory] e os seus métodos de clase.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:Exemplo de código:&lt;br /&gt;
:&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;&amp;quot; &amp;gt;&lt;br /&gt;
LatLng pos = new LatLng(latitude, lonxitude);&lt;br /&gt;
googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(pos,15));&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Importante:&amp;lt;/u&amp;gt; Fixarse como para manexar lonxitudes-latitudes temos que facer uso da [http://developer.android.com/intl/es/reference/com/google/android/gms/maps/model/LatLng.html clase LatLng]. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* getCameraPosition(): Devolve un obxecto da [http://developer.android.com/reference/com/google/android/gms/maps/model/CameraPosition.html clase CameraPosition] a posición da cámara. Dentro desta clase podemos chamar á propiedade target que nos devolve un obxecto da clase LatLng que representa a lonxitude e latitude da posición da cámara.&lt;br /&gt;
&lt;br /&gt;
:Exemplo de código:&lt;br /&gt;
:&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;&amp;quot; &amp;gt;&lt;br /&gt;
CameraPosition posCam = googleMap.getCameraPosition();&lt;br /&gt;
LatLng posicion = posCam.target;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
: Tamén podemos obter o zoom, orientación e ángulo accedendo ás propiedades zoom, bearing e tilt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Marcas no Mapa==&lt;br /&gt;
&lt;br /&gt;
Outra das aplicacións que pode ter o uso de GoogleMap é indicar mediante iconas, posicións concretas do mapa no que alberguemos certa información.&lt;br /&gt;
&lt;br /&gt;
[[Imagen:PDM_Avanzada_GoogleMap_22.jpg | 400px |center]]&lt;br /&gt;
&lt;br /&gt;
Isto o conseguimos coas clases [https://developer.android.com/intl/es/reference/com/google/android/gms/maps/model/Marker.html Marker] e  [http://developer.android.com/intl/es/reference/com/google/android/gms/maps/model/MarkerOptions.html MarkerOptions].&lt;br /&gt;
&lt;br /&gt;
* MarkerOptions: Crea unha marca nova no mapa.&lt;br /&gt;
&lt;br /&gt;
A forma de agregala sería:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;&amp;quot; &amp;gt;&lt;br /&gt;
googleMap.addMarker(new MarkerOptions()&lt;br /&gt;
		.position(googleMap.getCameraPosition().target)&lt;br /&gt;
		.title(&amp;quot;TI&amp;quot;)&lt;br /&gt;
		.snippet(&amp;quot;Ti nesta posición:&amp;quot;+ googleMap.getCameraPosition().target.toString())&lt;br /&gt;
		.icon(BitmapDescriptorFactory.fromResource(R.drawable.ic_launcher)));&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
&lt;br /&gt;
:Onde:&lt;br /&gt;
:* position: Posición da marca.&lt;br /&gt;
:* title: Texto que aparece na marca.&lt;br /&gt;
:* icon: Icona asociada á marca.&lt;br /&gt;
:* sniper: Texto que aparece cando pulsamos sobre a marca no mapa.&lt;br /&gt;
&lt;br /&gt;
A chamada ó método addMarker nos devolve o obxecto da clase Marker:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Marker: Representa a marca no mapa.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;&amp;quot; &amp;gt;&lt;br /&gt;
Marker marca;&lt;br /&gt;
marca = googleMap.addMarker(new MarkerOptions()&lt;br /&gt;
		.position(googleMap.getCameraPosition().target)&lt;br /&gt;
		.title(&amp;quot;TI&amp;quot;)&lt;br /&gt;
		.snippet(&amp;quot;Ti nesta posición:&amp;quot;+ googleMap.getCameraPosition().target.toString())&lt;br /&gt;
		.icon(BitmapDescriptorFactory.fromResource(R.drawable.ic_launcher)));&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
&lt;br /&gt;
:A través deste obxecto podemos obter:&lt;br /&gt;
&lt;br /&gt;
:* getPosition(): A posición (obxecto da clase LatLng).&lt;br /&gt;
:* getRotation(): A súa rotación.&lt;br /&gt;
:* getTitle(): O seu título.&lt;br /&gt;
: .....&lt;br /&gt;
&lt;br /&gt;
:* remove(): eliminamos a marca do mapa.&lt;br /&gt;
:* setVisible(boolean): Indicamos se queremos que sexa visible a marca no mapa.&lt;br /&gt;
&lt;br /&gt;
==Liñas no Mapa==&lt;br /&gt;
&lt;br /&gt;
Algunhas veces pode sernos de utilizade &amp;#039;unir&amp;#039; diferentes marcas no mapa (para indicar unha ruta por exemplo).&lt;br /&gt;
&lt;br /&gt;
[[Imagen:PDM_Avanzada_GoogleMap_21.jpg|300px|center]]&lt;br /&gt;
&lt;br /&gt;
Para facelo debemos utilizar a [https://developer.android.com/intl/es/reference/com/google/android/gms/maps/model/PolygonOptions.html clase PolygonOptions].&lt;br /&gt;
&lt;br /&gt;
Esta clase dispón do método add no que se lle pasa a posición a engadir (en forma de obxecto da clase LatLng). &lt;br /&gt;
&lt;br /&gt;
Cando se engade un obxecto desta clase ó mapa, este une os puntos.&lt;br /&gt;
&lt;br /&gt;
Por exemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;&amp;quot; &amp;gt;&lt;br /&gt;
PolygonOptions polOpt = new PolygonOptions();&lt;br /&gt;
polOpt.add(new LatLng(10,10));&lt;br /&gt;
polOpt.add(new LatLng(11,11));&lt;br /&gt;
polOpt.add(new LatLng(12,12));&lt;br /&gt;
polOpt.strokeColor(Color.BLUE);&lt;br /&gt;
				&lt;br /&gt;
googleMap.clear();&lt;br /&gt;
googleMap.addPolygon(polOpt);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Liña 5: Establece unha cor para a liña que vai unir os diferentes puntos.&lt;br /&gt;
* Liña 7: Limpa o mapa de marcas e liñas previamente debuxadas.&lt;br /&gt;
* Liña 8: Engade ó mapa o conxunto de liñas.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Caso Práctico==&lt;br /&gt;
&lt;br /&gt;
O obxectivo desta práctica é crear unha pantalla cun mapa de google.&lt;br /&gt;
&lt;br /&gt;
Poderemos cambiar de tipo de mapa (Satélite / Terrestre), movernos ó centro do mapa e gardar a posición e ir uníndoas cun polígono.&lt;br /&gt;
&lt;br /&gt;
O aspecto desta práctica é o seguinte:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Imagen:PDM_Avanzada_GoogleMap_20.jpg|500px|center]]&lt;br /&gt;
&lt;br /&gt;
* Como funciona a práctica:&lt;br /&gt;
&lt;br /&gt;
: A nosa icona sempre se visualizará no centro do mapa. Esta será a posición que poderemos gardar como &amp;#039;puntos de paso&amp;#039; e que despois se unirán formando unha ruta.&lt;br /&gt;
: Na parte superior temos:&lt;br /&gt;
:: Botón Satélite: Cambia o aspecto a modo satélite.&lt;br /&gt;
:: Botón Terrestre: Cambia o aspecto a modo terrestre.&lt;br /&gt;
:: Botón Marcar: Garda nun array a posición da icona. Unha vez temos gardados máis de dous, crea un polígono unindo os puntos.&lt;br /&gt;
:: Botón Mover: Move a icona ó centro do mapa. Para mover o mapa temos que premer sobre o mapa e sen soltar, arrastrar.&lt;br /&gt;
&lt;br /&gt;
: Ó premer sobre a icona informa da posición e amosa un texto.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===IMPORTANTE: Aspectos a ter en conta para que funcione este práctica===&lt;br /&gt;
&lt;br /&gt;
* Se estamos a utilizar un AVD temos que utilizar un que sexa &amp;#039;Google API 21&amp;#039; e cambiar as propiedades do proxecto tal como indicamos neste punto: [http://manuais.iessanclemente.net/index.php/PDM_Avanzado_GoogleMaps#Aclaraci.C3.B3n_sobre_o_dispositivo_virtual_android_.28AVD.29 Aclaración sobre o dispositivo virtual android (AVD)]&lt;br /&gt;
&lt;br /&gt;
* Necesitaremos xerar unha API KEY para o voso eclipse e proxecto como vimos neste punto: [http://manuais.iessanclemente.net/index.php/PDM_Avanzado_GoogleMaps#Obtenci.C3.B3n_da_API_KEY Obtención da API KEY].&lt;br /&gt;
&lt;br /&gt;
* Unha vez obtida debemos de escribila no sitio correspondente do arquivo AndroidManifiest.xml&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Creamos a activity===&lt;br /&gt;
&lt;br /&gt;
* Nome do proxecto: &amp;#039;&amp;#039;&amp;#039;UD6_02_Mapa&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* Nome da activity: &amp;#039;&amp;#039;&amp;#039;UD6_02_Mapa.java&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Código do layout xml&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot; line enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;&amp;quot; &amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;RelativeLayout xmlns:android=&amp;quot;http://schemas.android.com/apk/res/android&amp;quot;&lt;br /&gt;
    xmlns:tools=&amp;quot;http://schemas.android.com/tools&amp;quot;&lt;br /&gt;
    android:layout_width=&amp;quot;match_parent&amp;quot;&lt;br /&gt;
    android:layout_height=&amp;quot;match_parent&amp;quot;&lt;br /&gt;
   &lt;br /&gt;
&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;fragment &lt;br /&gt;
          android:id=&amp;quot;@+id/map&amp;quot;&lt;br /&gt;
          android:layout_width=&amp;quot;match_parent&amp;quot;&lt;br /&gt;
          android:layout_height=&amp;quot;match_parent&amp;quot;&lt;br /&gt;
          android:name=&amp;quot;com.google.android.gms.maps.MapFragment&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;Button&lt;br /&gt;
	    android:id=&amp;quot;@+id/UD6_02_btnSatelite&amp;quot;&lt;br /&gt;
	    android:layout_width=&amp;quot;wrap_content&amp;quot;&lt;br /&gt;
	    android:layout_height=&amp;quot;wrap_content&amp;quot;&lt;br /&gt;
	    android:layout_alignParentLeft=&amp;quot;true&amp;quot;&lt;br /&gt;
	    android:layout_alignParentTop=&amp;quot;true&amp;quot;&lt;br /&gt;
	    android:text=&amp;quot;Satelite&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;Button&lt;br /&gt;
	    android:id=&amp;quot;@+id/UD6_02_btnTerrestre&amp;quot;&lt;br /&gt;
	    android:layout_width=&amp;quot;wrap_content&amp;quot;&lt;br /&gt;
	    android:layout_height=&amp;quot;wrap_content&amp;quot;&lt;br /&gt;
	    android:layout_alignParentTop=&amp;quot;true&amp;quot;&lt;br /&gt;
	    android:layout_toRightOf=&amp;quot;@+id/UD6_02_btnSatelite&amp;quot;&lt;br /&gt;
	    android:text=&amp;quot;Terrestre&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;Button&lt;br /&gt;
	    android:id=&amp;quot;@+id/UD6_02_btnMarcar&amp;quot;&lt;br /&gt;
	    android:layout_width=&amp;quot;wrap_content&amp;quot;&lt;br /&gt;
	    android:layout_height=&amp;quot;wrap_content&amp;quot;&lt;br /&gt;
	    android:layout_alignParentTop=&amp;quot;true&amp;quot;&lt;br /&gt;
	    android:layout_toRightOf=&amp;quot;@+id/UD6_02_btnTerrestre&amp;quot;&lt;br /&gt;
	    android:text=&amp;quot;Marcar&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;Button&lt;br /&gt;
	    android:id=&amp;quot;@+id/UD6_02_btnMover&amp;quot;&lt;br /&gt;
	    android:layout_width=&amp;quot;wrap_content&amp;quot;&lt;br /&gt;
	    android:layout_height=&amp;quot;wrap_content&amp;quot;&lt;br /&gt;
	    android:layout_alignParentTop=&amp;quot;true&amp;quot;&lt;br /&gt;
	    android:layout_toRightOf=&amp;quot;@+id/UD6_02_btnMarcar&amp;quot;&lt;br /&gt;
	    android:text=&amp;quot;Mover&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/RelativeLayout&amp;gt; &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Código da clase UD6_02_Mapa&amp;#039;&amp;#039;&amp;#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Obxectivo:&amp;#039;&amp;#039;&amp;#039; Traballar cun mapa de Google Map utilizando marcas.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;22-24,35,46,58-69,81-100,107-126&amp;quot; &amp;gt;&lt;br /&gt;
import java.util.ArrayList;&lt;br /&gt;
&lt;br /&gt;
import android.app.Activity;&lt;br /&gt;
import android.graphics.Color;&lt;br /&gt;
import android.os.Bundle;&lt;br /&gt;
import android.view.View;&lt;br /&gt;
import android.view.View.OnClickListener;&lt;br /&gt;
import android.widget.Button;&lt;br /&gt;
import android.widget.Toast;&lt;br /&gt;
&lt;br /&gt;
import com.google.android.gms.maps.CameraUpdateFactory;&lt;br /&gt;
import com.google.android.gms.maps.GoogleMap;&lt;br /&gt;
import com.google.android.gms.maps.MapFragment;&lt;br /&gt;
import com.google.android.gms.maps.model.BitmapDescriptorFactory;&lt;br /&gt;
import com.google.android.gms.maps.model.LatLng;&lt;br /&gt;
import com.google.android.gms.maps.model.Marker;&lt;br /&gt;
import com.google.android.gms.maps.model.MarkerOptions;&lt;br /&gt;
import com.google.android.gms.maps.model.PolygonOptions;&lt;br /&gt;
&lt;br /&gt;
public class UD6_02_Mapa extends Activity {&lt;br /&gt;
&lt;br /&gt;
	private GoogleMap googleMap;&lt;br /&gt;
	private Marker marcaActual;&lt;br /&gt;
	private ArrayList&amp;lt;LatLng&amp;gt;marcas;&lt;br /&gt;
	&lt;br /&gt;
	private void xestionarEventos(){&lt;br /&gt;
		&lt;br /&gt;
		Button btnSatelite = (Button)findViewById(R.id.UD6_02_btnSatelite);&lt;br /&gt;
		btnSatelite.setOnClickListener(new OnClickListener() {&lt;br /&gt;
			&lt;br /&gt;
			@Override&lt;br /&gt;
			public void onClick(View arg0) {&lt;br /&gt;
				// TODO Auto-generated method stub&lt;br /&gt;
			&lt;br /&gt;
				googleMap.setMapType(GoogleMap.MAP_TYPE_SATELLITE);&lt;br /&gt;
				&lt;br /&gt;
			}&lt;br /&gt;
		});&lt;br /&gt;
		Button btnTerrestre = (Button)findViewById(R.id.UD6_02_btnTerrestre);&lt;br /&gt;
		btnTerrestre.setOnClickListener(new OnClickListener() {&lt;br /&gt;
			&lt;br /&gt;
			@Override&lt;br /&gt;
			public void onClick(View arg0) {&lt;br /&gt;
				// TODO Auto-generated method stub&lt;br /&gt;
			&lt;br /&gt;
				googleMap.setMapType(GoogleMap.MAP_TYPE_TERRAIN);&lt;br /&gt;
				&lt;br /&gt;
			}&lt;br /&gt;
		});&lt;br /&gt;
		&lt;br /&gt;
		Button btnMover = (Button) findViewById(R.id.UD6_02_btnMover);&lt;br /&gt;
		btnMover.setOnClickListener(new OnClickListener() {&lt;br /&gt;
&lt;br /&gt;
			@Override&lt;br /&gt;
			public void onClick(View arg0) {&lt;br /&gt;
				// TODO Auto-generated method stub&lt;br /&gt;
&lt;br /&gt;
				if (marcaActual != null)&lt;br /&gt;
					marcaActual.remove();&lt;br /&gt;
&lt;br /&gt;
				marcaActual = googleMap.addMarker(new MarkerOptions()&lt;br /&gt;
						.position(googleMap.getCameraPosition().target)&lt;br /&gt;
						.title(&amp;quot;TI&amp;quot;)&lt;br /&gt;
						.snippet(&lt;br /&gt;
								&amp;quot;Ti nesta posición:&amp;quot;&lt;br /&gt;
										+ googleMap.getCameraPosition().target&lt;br /&gt;
												.toString())&lt;br /&gt;
						.icon(BitmapDescriptorFactory&lt;br /&gt;
								.fromResource(R.drawable.ic_launcher)));&lt;br /&gt;
&lt;br /&gt;
			}&lt;br /&gt;
		});&lt;br /&gt;
		&lt;br /&gt;
		Button btnMarcar = (Button)findViewById(R.id.UD6_02_btnMarcar);&lt;br /&gt;
		btnMarcar.setOnClickListener(new OnClickListener() {&lt;br /&gt;
			&lt;br /&gt;
			@Override&lt;br /&gt;
			public void onClick(View arg0) {&lt;br /&gt;
				// TODO Auto-generated method stub&lt;br /&gt;
	&lt;br /&gt;
				marcas.add(googleMap.getCameraPosition().target);&lt;br /&gt;
				&lt;br /&gt;
				PolygonOptions polOpt = new PolygonOptions();&lt;br /&gt;
				for (LatLng lugar : marcas){&lt;br /&gt;
					polOpt.add(lugar);&lt;br /&gt;
				}&lt;br /&gt;
				polOpt.strokeColor(Color.BLUE);&lt;br /&gt;
				&lt;br /&gt;
				googleMap.clear();&lt;br /&gt;
				googleMap.addPolygon(polOpt);&lt;br /&gt;
&lt;br /&gt;
				marcaActual = googleMap.addMarker(new MarkerOptions()&lt;br /&gt;
				.position(googleMap.getCameraPosition().target)&lt;br /&gt;
				.title(&amp;quot;TI&amp;quot;)&lt;br /&gt;
				.snippet(&lt;br /&gt;
						&amp;quot;Ti nesta posición:&amp;quot;&lt;br /&gt;
								+ googleMap.getCameraPosition().target&lt;br /&gt;
										.toString())&lt;br /&gt;
				.icon(BitmapDescriptorFactory&lt;br /&gt;
						.fromResource(R.drawable.ic_launcher)));&lt;br /&gt;
&lt;br /&gt;
			}&lt;br /&gt;
		});&lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	private void prepararMapa(){&lt;br /&gt;
		&lt;br /&gt;
		googleMap = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap();&lt;br /&gt;
		&lt;br /&gt;
		if (googleMap==null){&lt;br /&gt;
			Toast.makeText(this, &amp;quot;ERRO O OBTER O MAPA&amp;quot;, Toast.LENGTH_LONG).show();&lt;br /&gt;
			finish();&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		LatLng pos = new LatLng(42.879985, -8.544855);	// Posición de Santiago de Compostela&lt;br /&gt;
		 &lt;br /&gt;
		marcaActual = googleMap.addMarker(new MarkerOptions()&lt;br /&gt;
			.position(pos)&lt;br /&gt;
			.title(&amp;quot;TI&amp;quot;)&lt;br /&gt;
			.snippet(&amp;quot;Ti nesta posición:&amp;quot; + pos.toString())&lt;br /&gt;
			.icon(BitmapDescriptorFactory.fromResource(R.drawable.ic_launcher))&lt;br /&gt;
				);&lt;br /&gt;
		&lt;br /&gt;
		googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(marcaActual.getPosition(),16));&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	@Override&lt;br /&gt;
	protected void onCreate(Bundle savedInstanceState) {&lt;br /&gt;
		super.onCreate(savedInstanceState);&lt;br /&gt;
		setContentView(R.layout.activity_ud6_02__mapa);&lt;br /&gt;
&lt;br /&gt;
		marcas = new ArrayList&amp;lt;LatLng&amp;gt;();&lt;br /&gt;
		prepararMapa();&lt;br /&gt;
		xestionarEventos();&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Liña 22: Definimos o mapa de google.&lt;br /&gt;
* Liña 23: A marca que representa a nosa posición. É necesaria xa que se queremos movela temos que primeiro eliminala e despois volvela a crear.&lt;br /&gt;
* Liña 24: Definimos o array que vai representar o conxunta de puntos que temos gardados.&lt;br /&gt;
&lt;br /&gt;
* Liña 35: Cambiamos o modo a Satélite ó premer o botón.&lt;br /&gt;
* Liña 46: Cambiamos o modo a Terrestre ó premer o botón.&lt;br /&gt;
* Liñas 58-69: Xestionamos o evento Click sobre o botón mover.&lt;br /&gt;
:* Liñas 58-59: Eliminamos a icona do mapa.&lt;br /&gt;
:* Liñas 61-69: Agregamos unha nova icona (marca) na posición actual da cámara.&lt;br /&gt;
&lt;br /&gt;
* Liñas 81-100: Xestionamos o evento Click sobre o botón marcar.&lt;br /&gt;
:* Liña 81: Agregamos a posición actual da cámara ó array de marcas.&lt;br /&gt;
:* Liñas 83-86: Creamos un PolygonOptions e agregamos todas as marcas gardadas no array.&lt;br /&gt;
:* Liña 87: Establecemos de cor azul a liña que une os puntos.&lt;br /&gt;
:* Liña 89: Limpa o mapa.&lt;br /&gt;
:* Liña 90: Agrega o PolygonOptions para debuxar as liñas entre os puntos.&lt;br /&gt;
:* Liñas 92-100: Agregamos unha nova icona (marca) na posición actual da cámara.&lt;br /&gt;
&lt;br /&gt;
* Liñas 107-126: Obtén unha referencia ó mapa e crea unha marca (icona) en Santiago de Compostela.&lt;br /&gt;
:* Liña 109: Obtén unha referencia ó mapa.&lt;br /&gt;
:* Liñas 116-123: Crea unha marca (icona) en Santiago de Compostela.&lt;br /&gt;
:* Liña 125: Move a cámara do mapa á posición da marca cun zoom de 15.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; -- [[Usuario:angelfg|Ángel D. Fernández González]] e [[Usuario:Carrion|Carlos Carrión Álvarez]] -- (2014).&lt;/div&gt;</summary>
		<author><name>Angelfg</name></author>
	</entry>
</feed>