Google Maps API V2

Como já visto há algum tempo no post Usando a API do Google no Android, o Google Maps é uma API que possibilita a renderização de mapas em uma aplicação, assim como possibilita manipular pontos em determinados lugares.

Em dezembro de 2012, a versão 1 do Google Maps Android API foi oficialmente classificada como obsoleta, ou seja, o Google não dá mais suporte a esta versão. Com isso, foi desenvolvida a versão 2 da API, com diferentes procedimentos para seu uso e funcionamento [1].

A versão 2 possui como diferenças da versão anterior: a configuração para zoom; adição de pontos no mapa; localização; tipo de mapa; animação de posição; marcadores; popup de informação [2].

Neste post será mostrado um exemplo simples de como encontrar um determinado endereço a partir de uma pesquisa por nome.

O novo procedimento para geração de chave, encontra-se na página oficial do Google API.

Após a geração da chave, é necessário criar um Meta-data com o valor da chave na tag application no manifesto Android, como na Listagem 1.

<meta-data android:name="com.google.android.maps.v2.API_KEY" android:value="[your_api_key]"/>
<meta-data android:name="com.google.android.gms.version" android:value="4030500" />
Listagem 1 – Meta-data com o a chave da tag application no manisfesto Android

Além da tag Meta-data, é necessário colocar tags de user-permission e de uses-feature. O arquivo Manifest ficaria conforme exemplo da Listagem 2.

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.matera.post.android"
android:versionCode="1"
android:versionName="1.0"
android:installLocation="internalOnly" >
<uses-sdk
android:minSdkVersion="16"
android:targetSdkVersion="16" />

<!-- Permissions -->
<permission android:name="com.matera.post.android.permission.MAPS_RECEIVE" android:protectionLevel="signature"/>
<uses-permission android:name="com.matera.post.android.permission.MAPS_RECEIVE"/>
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

<uses-feature
android:glEsVersion="0x00020000"
android:required="true" />

<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >

<activity
android:name=".activity.MapaActivity"
android:theme="@android:style/Theme.NoTitleBar"
android:screenOrientation="landscape" >
<intent-filter >
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>

<!-- Meta data Google Maps Service -->
<meta-data android:name="com.google.android.maps.v2.API_KEY" android:value="[your_api_key]"/>
<meta-data android:name="com.google.android.gms.version" android:value="4030500" />

</application>

</manifest>
Listagem 2 – Tags de user-permission e uses-feature

Em seguida, criamos um layout para mostrar o mapa, como demonstrado na Listagem 3.

<fragment
android:id="@+id/f_mapa"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
class="com.google.android.gms.maps.MapFragment" />
Listagem 3 – Layout para mostrar o mapa

Agora, como demonstrado na Listagem 4, criamos uma Activity com o setContentView apontando para o nosso layout criado anteriormente e inicializamos o GoogleMap, que é reponsável pelo controle do mapa.

fMapa = ((MapFragment) getFragmentManager().findFragmentById(R.id.f_mapa)).getMap();
Listagem 4 – Inicialização do GoogleMap

Com o Geocoder podemos localizar termos de pesquisas no Google Maps, basta passar os parâmetros para o método getFromLocationName que ele se encarrega de retornar endereços relacionados. A Listagem 4 mostra um exemplo de seu uso.

Geocoder geoCoordenadas = new Geocoder(context, Locale.getDefault());
try {

List<Address> listaEnderecos = geoCoordenadas.getFromLocationName(endereco, 5);
if (listaEnderecos != null && listaEnderecos.size() > 0) {

Address enderecoEncontrado = listaEnderecos.get(0);
String codigoPais = enderecoEncontrado.getCountryCode();
if (codigoPais != null && codigoPais.trim().lenght() == 0) {

return enderecoEncontrado;

}

}

} catch (IOException e) {
Log.e(TAG, e.getMessage());
}
Listagem 5 – Exemplo de uso do Geocoder

No código da Listagem 4, estou passando um endereço qualquer para o método do Geocoder do Google Maps API. O mesmo pode retornar uma lista de endereços relacionados a busca. Como restrição, atribui uma condição que verifica se esse endereço é um endereço do Brasil.

Agora que temos o endereço, vamos renderizar ele no nosso fragmento de mapa, mostrando sua exata localização.

Double latitude = (double) (enderecoEncontrado.getLatitude());
Double longitude = (double) (enderecoEncontrado.getLongitude());

final LatLng localizacao = new LatLng(latitude, longitude);
fMapa.clear();
fMapa.addMarker(new MarkerOptions().position(localizacao)
.title(enderecoEncontrado.getAddressLine(0) + ", " + enderecoEncontrado.getAddressLine(1))
.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED)));
fMapa.moveCamera(CameraUpdateFactory.newLatLngZoom(localizacao, 15));

fMapa.animateCamera(CameraUpdateFactory.zoomTo(17f), 2000, null);
Listagem 6 – Renderização de um ponto de endereço no mapa

Na Listagem 6, através do endereço consigo obter suas coordenadas de latitude e longitude. Utilizando o addMarker do GoogleMap, crio um ponto do endereço no mapa, movimento a camera para visualizar o ponto e crio uma animação de zoom para este ponto [3].

Nas Figuras 1, 2 e 3 podem ser vistos alguns screenshots dos resultados da aplicação criada.

Figura 1 – Tela inicial da aplicação de busca de endereços

Figura 2 – Pesquisando o endereço da MATERA Systems em São Paulo

Figura 3 – Exemplo de retorno de endereço não encontrado pelo serviço do Google Maps

Referências

[1] https://developers.google.com/maps/documentation/android/v1/

[2] http://www.decom.ufop.br/imobilis/?p=2546

[3] http://android-er.blogspot.com.br/2013/04/search-address-by-name-with-geocoder.html

Links Externos

Usando a API do Google no Android

Google API

Por MATERA SYSTEMS

Postado em: 15 de maio de 2014

Confira outros artigos do nosso blog

REST não é JSON

21 de agosto de 2017

Bruno Sofiato

[Webinar] Profile de aplicações Java com Oracle Mission Control e Flight Recorder

24 de julho de 2017

Danival Calegari

Criando Mocks de serviços REST com SoapUI

27 de junho de 2017

Monise Costa

JavaScript 6: diferença entre var, let e const

09 de maio de 2017

Otávio Felipe do Prado

Deixe seu comentário