Conectar com maps.google.com.br

4 respostas
leandroToledo

Pessoal, tenho que passar algum endereco de origem e destino para o googlemaps e depois tenho q pegar a rota que ele traca e apresentar na tela (sem ser em javascript)
Eu consegui fazer isto em asp.net, porem em java estou apanhando...
O erro esta na hora que ele tenta conectar.

Oque eu estou fazendo eh o seguinte:
//CODIGO QUE CONSULTA O SITE DO GOOGLEMAPS
public List<?> consultarRota(String origem, String destino) throws SAXException, IOException, ParserConfigurationException, XPathExpressionException{
		
		URL url = new URL ("http:/maps.google.com.br/maps?q=de" + origem + "para" + destino + "&output=kml&view=text");
		HttpURLConnection connection1 = (HttpURLConnection) url.openConnection();
		connection1.connect(); //aqui apresenta o erro.
		 
		InputStream input = connection1.getInputStream();
		 
		XStream xStream = new XStream();
		xStream.alias("name", name.class);
		xStream.alias("latitude", name.class);
		xStream.alias("longitude", name.class);
		List<?> lista = (List<?>) xStream.fromXML(input);
		
		return lista;
	}
//MEU METODO NO SERVLET
BLLGoogleAPIConnector api = new BLLGoogleAPIConnector();
		String origem = (String) request.getAttribute("origem");
		String destino = (String) request.getAttribute("destino");
		
		List<?> resultado = api.consultarRota(origem, destino);
		request.setAttribute("filmes", resultado);
		RequestDispatcher visao = request.getRequestDispatcher("retorno.jsp");
		visao.forward(request, response);
Outra duvida que eu estou eh sobre o "List"... se eu deixar ele como somente List o eclipse deixa ele sublinhado de amarelo (warning) tem algum problema?? ou o certo eh usar ele com o "?"

Na verdade eu ainda nao cheguei neste passo de passar o XML que o googlemaps me retorna e gravar em listas... o meu problema vem na hora de abrir a conexao..
Alguem sabe oque pode estar acontecendo.

Abaixo esta o erro que me aparece na aba de console:
SEVERE: StandardWrapperValve[servlet_GetRotas]: PWC1406: Servlet.service() for servlet servlet_GetRotas threw exception
java.lang.NullPointerException
	at sun.net.www.ParseUtil.toURI(ParseUtil.java:261)
	at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:795)
	at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:726)
	at BLL.BLLGoogleAPIConnector.consultarRota(BLLGoogleAPIConnector.java:51)
	at BLL.servlet_GetRotas.serviceRequest(servlet_GetRotas.java:61)
	at BLL.servlet_GetRotas.doPost(servlet_GetRotas.java:46)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:754)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:847)
	at org.apache.catalina.core.ApplicationFilterChain.servletService(ApplicationFilterChain.java:427)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:315)
	at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:287)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:218)
	at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:648)
	at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:593)
	at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:94)
	at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:98)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:222)
	at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:648)
	at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:593)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:587)
	at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1096)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:166)
	at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:648)
	at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:593)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:587)
	at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1096)
	at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:288)
	at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.invokeAdapter(DefaultProcessorTask.java:647)
	at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.doProcess(DefaultProcessorTask.java:579)
	at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.process(DefaultProcessorTask.java:831)
	at com.sun.enterprise.web.connector.grizzly.DefaultReadTask.executeProcessorTask(DefaultReadTask.java:341)
	at com.sun.enterprise.web.connector.grizzly.DefaultReadTask.doTask(DefaultReadTask.java:263)
	at com.sun.enterprise.web.connector.grizzly.DefaultReadTask.doTask(DefaultReadTask.java:214)
	at com.sun.enterprise.web.connector.grizzly.TaskBase.run(TaskBase.java:265)
	at com.sun.enterprise.web.connector.grizzly.WorkerThreadImpl.run(WorkerThreadImpl.java:116)
EU ja tentei fazer deste jeito mais tb deu erro:
DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance();
		domFactory.setNamespaceAware(true); 
		DocumentBuilder builder = domFactory.newDocumentBuilder();
		Document doc = builder.parse("http:/maps.google.com.br/maps?q=de" + origem + "para" + destino + "&output=kml&view=text"); // O ERRO ERA AQUI!
	    
		XPathFactory factory = XPathFactory.newInstance();
	    XPath xpath = factory.newXPath();
	    XPathExpression expr = xpath.compile("/kml/text()");

	    Object result = expr.evaluate(doc, XPathConstants.NODESET);
	    NodeList nodes = (NodeList) result;
	    for (int i = 0; i < nodes.getLength(); i++) {
	        rota1.add(nodes.item(i).getNodeValue()); 
	    }

Abracos e obrigado.

4 Respostas

B

porque nao usa a propria api do google maps para fazer isso ?

Falowsss…

E
http:/maps.google.com.br/maps?q=de

Não está faltando um “/” ? Se passar errado o Java não corrige, dá erro mesmo.

Dica: Ponha essa URL no seu browser (ex. Firefox) Veja para que valor ele vai corrigir a sua URL.

leandroToledo

E ai, era a url mesmo q estava errada… soh que meu problema agora esta aqui

XStream xStream = new XStream();

Esta falando que nao consegui achar os JAR do XSteam
O erro agora eh:

java.lang.NoClassDefFoundError: com/thoughtworks/xstream/XStream

Eu fui no eclipse cliquei em Java Build Path > Libraries > Add external Jars > (selecionei os arquivos no meu c:/) > Open > Ok
Dentro do meu projeto eu consigo inserir os JARS, mais na hora de rodar ou debugar ele me mostra este erro…
Obrigado.

leandroToledo

galera, pra nao abrir outro topico, eh o seguinte… eu tenho q enviar uma solicitacao ao ao googlemaps da forma q estou fazendo mesmo.
Do modo em XStream eu nao estou conseguindo pois esta dando um erro de duplicação de TAgs na hora q eu vou fazer o parse do xml pro obj. Na verdade achei meio complicado pois tenho q fazer uma classe pra cada tag do meu xml… isso eu teria q fazer umas 15 classes.

Já deste modo

Document doc = builder.parse("http:/maps.google.com.br/maps?q=de09910750para09910760&output=kml&view=text");

O meu objeto “doc” esta voltando nulo… e não eh lancado nenhuma exception e o objeto fica null :cry:

Meu projeto web pra faculdade eh o seguinte… eu tenho no meu BD uma tabela “PEDIDO”, e para cada pedido eu tenho uma rota na tabela “ROTA”. Entao eu tenho q pegar soh as latitudes, longitudes, descricao, distancia e distanciaTotal e coloca na minha tabela “ROTA”.

Alguem sabe como posso fazer isto?

Criado 21 de abril de 2010
Ultima resposta 23 de abr. de 2010
Respostas 4
Participantes 3