Beruflich Dokumente
Kultur Dokumente
Mesmo na sua verso anterior, era necessrio criar uma Google Map API Key. Esta tarefa era feita atravs do keytool do Java, gerando uma chave MD5. Esta string, era ento colocada em uma caixa de texto no site de gerao da API Key. Como retorno tnhamos exatamente esta chave que era usada na MapView. O processo na nova verso da API est vinculado ao Google APIs Console (https://code.google.com/apis/console/). Neste ambiente poderemos criar um novo aplicativo, tendo acesso a um nmero grande de servios do Google. No lado esquerdo da pgina, temos um combo com os nossos projetos. Ao selecionar um deles podemos clicar emServices. Entre as dezenas de servios temos o Google Maps Android API v2, que deve ser mudado para o estado on. O prximo passo clicar no link API Access, tambm no lado esquerdo. Na extremidade inferior desta pgina temos um link Create nem android key. Na caixa de texto apresentada deve-se colocar o SHA1 de seu certificado, seguido do nome do pacote da sua aplicao Android que dever interagir com os servios Google. E como listamos o SHA1? Basta utilizar esta linha de comando no DOS. Lembrando que o keytool uma ferramenta do Java: keytool -list -v -keystore C:\Users\your_user_name\.android\debug.keystore -alias androiddebugkey storepass android -keypass android O debug.keystore est na sua pasta de usurio, no diretrio .android. O storepass e o storepass, so valores padres para a chave de debug padro que j vem com o SDK do Android. Caso seu aplicativo j est utilizando uma chave prpria para lanar aplicativos na Google Play, dever mudar o endereo da keystore, bem como os valores das senhas. Com o SHA1 em mos, volte ao Google APIs Console, e copie este valor l, seguido de um ponto e vrgula e, finalmente, o nome do pacote de seu aplicativo. No API Access veremos a seguinte informaes:
Key for Android apps (with certificates) API key: Android apps: Activated on: AIzaSyAFPR7lvUbBBFnjzeJj7Qlo7uFFwrxfaCo 3A:7E:62:E9:81:F6:31:7F:AB:42:D5:A9:B7:EF:3F:EC:14:37:02:59;com.example.usingmapapiv2
O valor API key a nossa chave, que ser adicionada no arquivo AndroidManifest.xml de seu projeto:
Mudanas no AndroidManifest
Alm disso, o manifesto deve receber as seguintes linhas:
<uses-permission android:name="<$E%_PA&'(E#.permission.)AP$_*E&EI+E" " # <uses-permission android:name="android.permission.I-(E*-E(" "# <uses-permission android:name="android.permission..*I(E_E/(E*-A,_$('*A 0E" "# <uses-permission android:name="com.google.android.providers.gs1.permis sion.*EA2_0$E*+I&E$" "# <uses-permission android:name="android.permission.A&&E$$_&'A*$E_,'&A(I '-" "# <uses-permission android:name="android.permission.A&&E$$_3I-E_,'&A(I'" "#
As duas primeiras permisses so necessrias para chamadas da Google Maps API ao nosso aplicativo. A permisso de INTERNET se faz necessria para baixar os pedaos da imagem que compe o mapa. OWRITE_EXTERNAL_STORAGE tambm utilizada pela API para fazer cache das imagens do mapa.READ_GSERVICES para ler servios do Google e, finalmente, ACCESS_COARSE_LOCATION eACCESS_FINE_LOCATION para pegar o posicionamento global via rede e GPS, respectivamente. Tambm necessria um uses-feature nno seu manifesto. Isso porque esta nova API faz uso do Open GL e, o device que executar seu aplicativo, deve fornecer suporte de forma obrigatrio a ele:
<75ml version="8.4" encoding="ut1-9"7# <1ragment 5mlns:android=:ttp:""sc:emas.android.com"ap!"res"android android:id=";<id"map" android:la out_=idt:="matc:_parent" android:la out_:eig:t="matc:_parent" android:class="com.google.android.gms.maps.)ap3ragment" "#
O class sempre ser o mesmo valor. Veja como o api_key saiu da interface e foi direto para o AndroidManifest? Desta maneira, no precisamos colocar a chave em diversas partes do cdigo. E na Activiy no temos nenhuma mudana:
e5tends Activit
i1 @m)ap E= nullB ?
m)ap.set)ap( pe@0oogle)ap.)AP_(YPE_FYA*I2BC
Adicionando Marcadores/POIs
Uma das utilidades mais importantes em um mapa a adio de pontos de interesse (Point of Interest). De nada adianta vermos uma imagem em trs dimenses de uma cidade sem nenhuma informao relevante associada ao contexto de uso. Na verso 1.0 da API de mapas, isso era feito com uma classe chamada Overlay. Mas de agora em diante esquea isso. Na nova API essa tarefa est nas mos do mtodo addMarker, da classe GoogleMap.
)ar!er min:a&idade = m)ap.add)ar!er@ne= )ar!er'ptions@B .position@ne= ,at,ng@-29.G9929HI-J8.9KJHKJBB .title@"2avid &ana>arro"B .snippet@"Population: K.944"BBC
Esse marcador tambm poderia ter cone associado, utilizando o icon de MarkerOptions. Alm disso, podemos customizar totalmente o comportamento da janela que mostrada no instante em que clicamos em um marcador. Para tanto, basta criar uma implementao da interface InfoWindowAdapter e chamar o mtodoGoogleMap.setInfoWindowsAdapter com sua implementao.
Polylines e Polygons
Talvez uma das mudanas mais bem vindas nos mapas foi a possibilidade de insero de polylines e polygons. O primeiro trata-se de uma definio de mltiplas linhas, definido propriedades como cor e largura. Polygons trata-se de um polgono. Isso abre diversas possibilidades. Poderamos criar um aplicativo com um mapa de regies histricas de uma cidade, criando polgonos em cada regio. Podemos criar uma rota inserindo diversas linhas sucessivas. E assim por diante. O primeiro passo para criar um polyline definir um PolylineOptions, onde definimos os pontos geogrficos de cada linha. Utilizando para isso instncias de objetos LatLng. Com a instncia das opes em mos, podemos definir algumas propriedades e, logo a seguir, utilizarmos na chamada do mtodo GoogleMap.addPolyline. O retorno deste ltimo mtodo uma instncia de Polyline. Veja o exemplo abaixo (retirado do site developer.android.com, assim como a imagem).
""instancia um novo Pol line e adiciona pontos para de1inir um retLngu lo Pol line'ptions rect'ptions = ne= Pol line'ptions@B .add@ne= ,at,ng@GM.GJI -822.4BB .add@ne= ,at,ng@GM.KJI -822.4BB .add@ne= ,at,ng@GM.KJI -822.2BB .add@ne= ,at,ng@GM.GJI -822.2BB .add@ne= ,at,ng@GM.GJI -822.4BBC
E o Polygon, sua forma de uso muito diferente? No. Na verdade os cdigos so extremamente semelhantes. Veja no trecho de cdigo abaixo, tambm retirado do developer.android.com:
"" Instancia um o>Neto Pol gon e adiciona pontos em sentido anti-:orOr io para de1iner um retLngulo Pol gon'ptions rect'ptions = ne= Pol gon'ptions@B .add@ne= ,at,ng@GM.GJI -822.4BI ne= ,at,ng@GM.KJI -822.4BI ne= ,at,ng@GM.KJI -822.2BI ne= ,at,ng@GM.GJI -822.2BI ne= ,at,ng@GM.GJI -822.4BBC
O PolygonOptions serve para definer os pontos geogrfico que definir o polgono. Simplesmente usamos seu mtodoadd para passar diversas instncias de LatLng. Perceba que o primeiro e o ltimo ponto so coincidentemente iguais. Isso no chega a ser uma regra, visto que, caso no seja fornecido o ponto de incio e final iguais, a API traa uma reta para fechar o polgono. Como configuraes, estamos definindo a cor do trao para vermelho e a cor de preenchimento do polgono para azul. E, finalmente, chamando o mtodo GoogleMap.addPolygon().
As alteraes na cmera so feitas com o mtodo GoogleMap.animateCamera, passando como parmetro um mtodo esttico da classe CameraUpdateFactory. Por exemplo, as duas linhas abaixo mostram como dar um zoom in e zoom out na viso, respectivamente.
Tudo bem, mas digamos que queria configurar diretamente para um nvel de zoom, eu posso? Com certeza, veja a linha abaixo. O valor passado por parmetro deve ser um valor entre 2.0 e 21.0. Valores fora desde intervalo so convertidos automaticamente. Por exemplo, passei como parmetro 37, ele converte para 21.
m)ap.animate&amera@&amera%pdate3actor .Qoom(o@82BBC
Outra mudana que eu posso efetuar simplesmente mover a cmera, j aplicando o nvel de zoom desejado. Veja nas linhas abaixo. Neste caso vamos mudra um mtodo explcito, chamado de moveCamera. Seu parmetro novamente um mtodo de CameraUpdateFactory, que, por sua vez, recebe uma instncia de LatLng e o nvel de zoom, como parmetros.
Mas at a no tem nada de novo em relao a antiga API. Porm, agora podemos mudar o ngulo de visualizao do mapa, chamado de Tilt na API. Basicamente, podemos mudar um mapa que est sendo visto exatamente de cima, como mostra a imagem abaixo:
Para uma viso onde temos um ngulo de viso de 45 graus, como na imagem abaixo (as duas imagens foram retirados de developer.android.com).
&ameraPosition cp = ne= &ameraPosition.Auilder@B .target@ne= ,at,ng@TBB"" centro do mapa para uma lat e long .Qoom@8MB .>earing@R4B .tilt@KJB .>uild@BC "" con1igure o nUvel de Qoom "" muda a orientaPVo da camera para leste "" Lngulo de visVo da cLmera para KJ graus "" cria um &ameraPosition a partir do >uilder
m)ap.animate&amera@&amera%pdate3actor .ne=&ameraPosition@cpBBC