Namespaces

Variants
Actions

Please note that as of October 24, 2014, the Nokia Developer Wiki will no longer be accepting user contributions, including new entries, edits and comments, as we begin transitioning to our new home, in the Windows Phone Development Wiki. We plan to move over the majority of the existing entries over the next few weeks. Thanks for all your past and future contributions.

Uma aplicação utilizando Location API e Google Maps

From Wiki
Jump to: navigation, search
Article Metadata

Artigo
Tradução:
Por thiagobrunoms
Última alteração feita por lpvalente em 26 Sep 2013

Neste post eu irei mostrar-lhes uma aplicação interessante com a Location API. O objetivo é obter a posição do dispositivo através de GPS (com a Location API - JSR 179) e usá-la com o Google Maps.

A Location API (JSR 179)

A API Location (JSR 179 - pacote opcional) javax.microedition.location visa ajudar o desenvolvimento de aplicativos e serviços baseados em localização para dispositivos com recursos limitados, como telefones celulares. A aplicação deve ser definida para CLDC 2.0 (CLDC 1.0 não suporta o número de ponto flutuante, que a API utiliza para representar coordenadas e outras medidas).

A API do Google Map

Observação: Utilização deste código com a chave livre do Google Maps API infringe os termos do Google [Termos e Condições http://code.google.com/apis/maps/terms.html] (art. 10.8). Você deve comprar uma licença se você quiser utilizar a API do Google Maps, como mostrado neste exemplo.

A API do Google Maps permite-lhe incorporar o Google Maps em suas próprias páginas web com JavaScript. Portanto, vamos apenas usar um web services baseado em REST para obter a imagem do mapa e desenhar na tela do dispositivo. Nós só devemos requisitar o map através do endereço
http://maps.google.com/staticmap?params
URL e definir alguns parâmetros, tais como, latitude e longitude, tamanho da imagem, zoom, tipo de mapa (celular, etc) e, se você desejar, aplicar um marcador na posição corrente para a imagem estática. É importante notar que o exemplo a seguir foca dispositivos para a série S60.

Exemplo

A ideia básica é: (1) obter a posição do GPS e (2) passar a latitude e a longitude para os Web Services REST (URL) do Google Maps, (3) obter a imagem de resposta do servidor no formato de array de bytes. Assim, nosso primeiro passo é mostrado abaixo: O algoritmo abaixo deve ser implementada em uma thread diferente. Caso contrário, a interface do usuário pode ser bloqueada até que a resposta seja finalizada.

Criteria cr = new Criteria();
cr.setHorizontalAccuracy(500);
cr.setPreferredPowerConsumption(Criteria.NO_REQUIREMENT);
 
LocationProvider provider = null;
Location location = null;
 
try {
provider = LocationProvider.getInstance(cr);
location = provider.getLocation(120);
provider.setLocationListener(this, -1, 0, 0);
} catch (LocationException e) {
alert = new Alert("Error", "Location API Error", null, AlertType.ERROR);
} catch (InterruptedException e) {
alert = new Alert("Error", "Thread Error", null, AlertType.ERROR);
}
 
Coordinates c = location.getQualifiedCoordinates();
if(c != null) {
this.lat = c.getLatitude();
this.lon = c.getLongitude();
}

No início do código de exemplo acima, primeiro defini-se alguns critérios para a localização dos serviços de localização GPS. Campos de critérios incluem: precisão o tempo de resposta, a necessidade de altitude e velocidade. Estes campos de critérios irá filtrar a LocationProvider que satisfaça os valores indicados. Depois de obtido um objeto LocationProvider, o aplicativo pode usar esse objeto para obter a localização, em qualquer uma das duas maneiras:

  • Invocar um método de forma síncrona para obter um único local.
  • Registrar um ouvinte e obter atualizações periódicas, em intervalos definidos.


Os resultados de localização podem ser obtidos com a classe Location. Uma instância desta classe pode disponibilizar algumas informações essenciais, tais como: coordenadas, velocidade e endereço textual (se disponível), e um valor cronológico que indica quando as medições de localização foram feitas.

As coordenadas podem ser representadas em duas classes diferentes:

  • Coordenadas: um ponto de latitude e longitude em graus e altitude em metros.
  • QualifiedCoordinates: latitude, longitude e altitude, e também uma indicação da sua exactidão, representado como o raio de uma área.

Finalmente, temos as nossos principais informações: latitude (através do método c.getLatitude()) e longitude (através do método c.getLongitude()). Tudo o que temos de fazer agora é abrir uma conexão HTTP com o servidor do Google Maps.

HttpConnection httpConnection = null;
InputStream inputStream = null;
byte[] buffer = null;
 
try {
httpConnection = (HttpConnection) Connector.open(url);
httpConnection.setRequestMethod(HttpConnection.GET);
is = httpConnection.openInputStream();
int length = (int)httpConnection.getLength();
if(length > 0) {
buffer = new byte[length];
is.read(buffer);
} else {
int c;
ByteArrayOutputStream byteArray = new ByteArrayOutputStream();
while ((c = inputStream.read()) != -1) {
byteArray.write(c);
}
buffer = byteArray.toByteArray();
byteArray.close();
}
} catch(Exception e) {
alert = new Alert("Error", "Falha na conexão", null, AlertType.ERROR);
} finally {
try {
if(inputStream != null)
inputStream !=.close();
if(httpConnection != null)
httpConnection.close();
}
catch(Exception e2) {
alert = new Alert("Error", "Erro de IO!", null, AlertType.ERROR);
}
}
 
return buffer;

O código acima abre uma conexão HTTP com um determinado URL e recebe a resposta do servidor. Esta URL é um Web Service REST disponibilizado pelo Google Maps, e é como segue:

http://maps.google.com/staticmap?center=lat,lon&zoom=16&size=200x200&maptype=mobile&markers=lat,lon,ref/&key=MAPS_API_KEY

In this URL, we set some parameters for the static image: latitude and longitude, its zoom and its size (200x200), the map type (for mobile application) and a marker plotted based on lat and lon values. In our example, the application got (through GPS positioning) the Federal University of Campina Grande latitude and longitude values.

Nesta URL, define-se alguns parâmetros para a imagem estática: latitude e longitude, o seu zoom e seu tamanho (200x200), o tipo de mapa (para celular) e um marcador de localização com base em valores de lat (latitude) e lon (longitude). No nosso exemplo, a aplicação tem (através de posicionamento GPS) a latitude e a longitude da Universidade Federal de Campina Grande.

A imagem retornada pelo web service (byte[]) é utilizado para desenhar o mapa na tela.

Form f = new Form("Map");
f.append(Image.createImage(buffer, 0, buffer.length))

O resultado é:

GoogleMapJ2ME.PNG

This page was last modified on 26 September 2013, at 18:13.
234 page views in the last 30 days.

Was this page helpful?

Your feedback about this content is important. Let us know what you think.

 

Thank you!

We appreciate your feedback.

×