通过Java访问Google Directions API

时间:2011-04-20 06:04:23

标签: web-services google-maps

我正在尝试创建一个简单的Java应用程序。它希望能够输入原点和目标,并输出它在xml中所采用的路径。

这是我到目前为止所得到的。我主要关注的是将xml输出到控制台。

import java.net.HttpURLConnection;
import java.net.URL;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.Document;

public class directionService{


    public static void main(String[] args) {

        String start = "geelong";
        String finish = "melbourne";

        String region = "au";

        System.out.println(calculateRoute(start,finish,region));
    }

    private static String calculateRoute(String start, String finish, String region){
        String result = "";
        String urlString = "http://maps.googleapis.com/maps/api/directions/json?sensor=false&origin="+start+"&destination="+finish;
        System.out.println(urlString);

        try{
            URL urlGoogleDirService = new URL(urlString);

            HttpURLConnection urlGoogleDirCon = (HttpURLConnection)urlGoogleDirService.openConnection();

            urlGoogleDirCon.setAllowUserInteraction( false );
            urlGoogleDirCon.setDoInput( true );
            urlGoogleDirCon.setDoOutput( false );
            urlGoogleDirCon.setUseCaches( true );
            urlGoogleDirCon.setRequestMethod("GET");
            urlGoogleDirCon.connect();

            DocumentBuilderFactory factoryDir = DocumentBuilderFactory.newInstance();
            DocumentBuilder parserDirInfo = factoryDir.newDocumentBuilder();
            Document docDir = parserDirInfo.parse(urlGoogleDirCon.getInputStream());

            urlGoogleDirCon.disconnect();
            result = docDir.toString();


        return result; 
        }

        catch(Exception e)
        {
            System.out.println(e);
            return null;
        }

    };

}

它会抛出此错误

  

java.net.ConnectException:连接超时:连接

我尝试从其他网络服务获取数据并返回xml转储。我读过在谷歌文档中有一个密钥,这是必需的吗?如果我直接将查询输入浏览器,它似乎工作正常。

  

http://maps.googleapis.com/maps/api/directions/xml?sensor=false&origin=geelong&destination=melbourne

任何帮助都会受到很大关注!

谢谢, 史蒂夫

2 个答案:

答案 0 :(得分:0)

我认为您需要在HttpURLConnection上setConnectionTimeout 。 在stackoverflow中尝试这个link

答案 1 :(得分:0)

你是否在防火墙后面?您可能需要在通话前输入代理服务器详细信息:

Properties systemProperties = System.getProperties();
systemProperties.setProperty("http.proxyHost", proxy);
systemProperties.setProperty("http.proxyPort", port);
System.setProperty("http.proxyUser", user);
System.setProperty("http.proxyPassword", password);