Java + googlemaps

22 respostas
L

Bom dia galera, estou precisando de uma ajuda para realizar uma tarefa aqui no serviço.
preciso jogar uma latitude e uma longitude capturada pelo meu gps e jogar esses valores no google maps para abrir as coordenadas.

Referente a esses valores (latitude e longitude), já tenho tudo funcionando certinho, só preciso agora saber a partir desses valores, como usá-los para abrir no googlemaps.
Resumindo: pegar 2 valores e abri-los no googlemaps.
Aguardo uma ajuda, obrigado.
Abraços.

22 Respostas

P

Cara da uma olhada nesse link acho que pode te ajudar

http://code.google.com/intl/pt-BR/apis/maps/index.html

L

Será que só tem essas APIs para javaScript e Flash?
No meu caso estou usando Java. Uma aplicação Java.
Poderia ser tmb uma forma de jogar uma String em um campo de um site, teria como fazer isso?
Exemplo:
abro o site do google e no campo de busca eu jogar uma palavra (String) para realizar a busca
Isso seria possivel? porque eu poderia pegar minha latitude e longitude e transformar em uma String e daí realizar minha busca.
Abraços.

P

da uma olhada nesse
http://code.google.com/intl/pt-BR/apis/maps/documentation/webservices/index.html

com ele vc faz a assinatura e abre o google maps, tem um exemplo em java la em baixo

L
Consegui fazer, mas com uma ideia diferente. Criei um método para abrir um link e nesse link já contendo a coordenada para abrir direto no google maps. Seguinte:
public class abrirGoogleMaps {

    //rmc dados;
    static String url1 = "http://maps.google.com.br/maps?hl=pt-br&biw=1600&bih=718&q=";
    static String url2 = "%2C";
    static String url3 = "&um=1&ie=UTF-8&sa=N&tab=wl";    
    static String latitude = "-20";
    static String longitude = "-40";
    static String urlFinal = url1+latitude+url2+longitude+url3;

    public static void main (String [] agrs) throws Exception{

        abreNavegador(urlFinal);        

    }

    public static void abreNavegador(String url) throws Exception{
        try {
            URI uri = new URI(url);
            Desktop desktop = null;
            if (Desktop.isDesktopSupported()) {
                desktop = Desktop.getDesktop();
            }
            if (desktop != null)
                desktop.browse(uri);
            } catch (IOException ioe) {
                ioe.printStackTrace();
            } catch (URISyntaxException use) {
                use.printStackTrace();
        }
    }
}

o que ele faz? url1, url2, url3, latitude e longitude que compõe o endereço, juntando tudo abre o link correspondente à coordenada conforme latitude e longitude.
e o método abreNavegador() se encarrega de abrir o link no browser padrão.
Agora só falta uma coisa, depois que eu abro esse link, a posição do gps pode mudar (carro em movimento por exemplo) e logo teria que atualizar esta informação.
Como eu faria para, por exemplo, através da minha mesma aplicação java dar esse refresh de 10 em 10 segundos.

P

penso em toda hora em que o gps trocar o caminho ele manda as coordenadas e atualizar a pagina, algo assim

L

é, nisso eu tava pensando, mas agora veio uma coisa na cabeça. Se a coordenada mudar, o link tmb vai mudar, então teria que abrir outro link,seria ± assim:

link_1 = coordenada_1
ai passou 10 minutos e o carro andou 5 km.
link_2 = a nova coordenada.

Teria que fechar o firefox e reabrir com o novo link, mas aí fica feio ne, ficar abrindo e fechando o firefox toda hr q mudar o local do gps, teria que fazer uma forma de o link atualizar sem fechar o firefox. Só um refresh não adiantaria…
Nun faço a minima ideia de como fazer isso, auheuaheuha, mas, se achar alguma coisa posto aqui, vlw galera.
Abraços.

P

que tal criar uma pagina web ai dentro dela vc coloca um iframe e vai atualizando o endereço e o iframe por ajax toda vez que houver uma alteração ?

L

Poderia ser, mas nao saco nada de ajax, e essa coordenada (latitude e longitude) que tenho que obter, é através de uma aplicação java.
Daria para fazer isso? se sim, me dê algumas dicas sobre iframa, ajax, pois nao trabalho com isso.
Obrigado pela ajuda, abraços.

P

E se vc criar um navegador só para isso ? da uma olhada nesse código http://www.guj.com.br/java/10444-navegador-java (não sei se funciona), é uma maneira de abrir o site sem programar em java web

L

Depois de pensar muito aqui, acho q achei uma solução pro meu problema.
Gostaria de algumas opiniões para ver se ficou meio gambiarrado ou nao.

1º Passo: Gerando um arquivo.html (File) na aplicação Java
<html>
<title> GoogleMaps </title>
<meta http-equiv="refresh" content="5">
<frameset rows="100%"><frame src="http://www.google.com" />
</frameset>
</html>

O que esse html faz? se vc abri-lo no firefox, será aberto o site do google e de 5 em 5 segundos ele será atualizado

2º Passo: Editar ou criar um novo arquivo.html com o novo link.
Então, no proximo refresh do firefox, ele já irá buscar o novo link que foi alterado no arquivo.html

E ai, acha que fica legal ou ficou POG? (Programação Orientada a Gambiarra)

P

Se funcionar fica legal

L

hahaha, acho q consegui, falta só eu abrir meu arquivo.
como faço para abrir um arquivo na minha aplicação Java?
exemplo, em certo momento la eu quero abrir um arquivo.txt, como eu faço para abrir esse arquivo?
Abraços.

I

Opa!
Utiliza o FileReader…

FilerReader fr = new FileReader(new File("C:/pasta/....../meu arquivo.txt"));
BufferedReader br= new BufferedReader(fr);
while(true){
String linha=br.readLine();// Lê cada linha do teu arquivo
if(linha==null)break;
}
br.close();
fr.close();
}
L

Pow, vlw, sempre a galera do GUJ me ajudando aqui, quando acabar posto o código aqui pra galera dar uma olhada, vai que serve pra alguém.
Abraços.

L
Ta dando um erro:
String html = "teste.";

        FileWriter writer = new FileWriter(nomeArquivo, true);
        PrintWriter saida = new PrintWriter(writer, true);
        saida.println(html);
        saida.close();
        writer.close();

        FileReader fr = new FileReader(new File("/home/lucas/NetBeansProjects/LeitorGps/link.html"));
        BufferedReader br = new BufferedReader(fr);

        while (true) {
            String linha = br.readLine(); // Lê cada linha do teu arquivo
            if (linha == null) {
                break;
            }
            br.close();
            fr.close();
        }
Ta dando erro nessa linha: String linha = br.readLine(); // Lê cada linha do teu arquivo
L

achei uma outra solução.

Runtime.getRuntime().exec("firefox /home/usuario/link.html");

Dessa forma já abre o firefox com o link que eu quero abrir, no caso aí tá indicando para abrir um html que eu criei, mas, poderia ser tmb:

Runtime.getRuntime().exec("firefox www.google.com.br");

Abraços.

L
Consegui fazer funcionar, gostaria da opinião para saber se ficou legal. Segue o código e mais abaixo explicarei os detalhes.
public class abrirGoogleMaps {

    static float latit = (float) -20.289219; //valor qualquer só para testar a aplicação
    static float longi = (float) -40.292070; //valor qualquer só para testar a aplicação
    static final String nomeArquivo = "link.html";
    static boolean flag = true; //flag para executar o browser somente uma vez

    public static void main(String[] agrs) throws Exception {

        abreGoogleMaps();

    }

    public static void abreGoogleMaps() throws IOException, InterruptedException{
        
        for (int i = 0; i <= 25000; i++) {

            String urlFinal = "http://maps.google.com.br/maps?hl=pt-br&biw=1600&bih=718&q=" + String.valueOf(latit) + "%2C" + String.valueOf(longi) + "&um=1&ie=UTF-8&sa=N&tab=wl";
            String html = "<html> <title> GoogleMaps </title> <meta http-equiv='refresh' content='10'> <frameset rows='100%'><frame src='" + urlFinal + "/> </frameset> </html>";            

            FileWriter writer = new FileWriter(nomeArquivo, false); //true nao apaga o texto, false reescreve por cima.
            PrintWriter saida = new PrintWriter(writer, false);
            saida.println();
            saida.println(html);
            saida.close();
            writer.close();
            System.out.println( (i+1) + "a vez: Latitude: " + latit + " ||| Longitude: " + longi);

            // flag para o firefox ser executado somente uma vez.
            if (flag) {
                Runtime.getRuntime().exec("firefox /home/lucas/NetBeansProjects/LeitorGps/link.html");
                flag = false;
            }

            Thread.sleep(10000); // tempo de 10 em 10 seg para atualizar a posição
            latit = (float) (latit - 0.0001);
            longi = (float) (longi - 0.0001);                        
        }        
    }    
}

String urlFinal é o link já atualizado com as novas coordenadas que serão mostradas no mapa (juntando latit e longit formam o link responsável por abrir o mapa com a posição desejada).
String html é uma string que será o conteudo do arquivo "link.html" e que dentro desse link.html terá o endereço "urlFinal" mostrado acima.
Então, depois de criado o arquivo, executo esse "link.html" no firefox e já abre o site que configurei junto com as configurações.
Por que criei esse link.html? podem ver que ele contém algumas configurações como, dar um refresh de tempo em tempo, para assim atualizar minha nova posição no mapa.
Bom, é isso e assim o for vai rodopiando e alterando o valor da minha coordenada em -0.0001 e assim meu ponto vai andando no mapa.

L

hahaha, apareceu um problema que eu não esperava, se testo ela somente, executando pelo netbeans, funciona normal. Se gero um .jar a aplicação funciona, só nun abre o navegador, pqp!!!

Executo ela pelo terminal, java -jar aplicacao.jar, abre normal, até aparece as mensagens que coloquei para ver o andamento da aplicação, ela finaliza com sucesso, mas o navegador nun abre igual quando executo ela pelo netbeans.
Alguém tem idéia do que pode ser?
Abraços.

L

Já achei o erro, tava executando o .jar como root (pelo terminal do linux), executei o comando como usuário normal e funcionou sem problemas.
Abraços.

A

Ola lucasdona se puderes compartilhar o codigo fico muito agredecido, estou com um prolema semelhante

L

Boa tarde amaica, o código é esse acima mesmo, o que tá faltando é a parte que recebe os dados do gps, esse infelizmente eu não tenho mais o código em java. Mas… tenho um novo código que fiz em python (não gostei muito de trabalhar com serial no java), que informa a posição e outras informações via socket, daria pra fazer esse código acima em java recebendo a posição via socket, trabalhando a parte de gps no python e o mapa em java. Mas lembrando, esse código acima não tá muito bom pra se trabalhar com mapas, fiz só pra testes mesmo, já que ele dá um refresh no mapa com as novas posições. Se for isso mesmo o que vc precisa a gente pode ver alguma coisa. outra coisa, código ta todo implementado pra rodar no Linux.
Abraços.

A

Ola obrigado pelo retorno, na verdade meu objetivo é mais simples, preciso buscar a latitude e longitude com base no enderço.

Criado 23 de março de 2011
Ultima resposta 23 de mar. de 2013
Respostas 22
Participantes 4