百度地图API快速使用 - 以批量算路为例讲解

目录

1. 开发文档链接

2. 开发流程说明

(1)首先-创建应用获取访问应用的AK

(2) 查看文档的示例代码并分析

3. 简单改编示例的代码


1. 开发文档链接

批量算路 | 百度地图API SDK (baidu.com)icon-default.png?t=N7T8https://lbsyun.baidu.com/faq/api?title=webapi/routchtout-drive

2. 开发流程说明

(1)首先-创建应用获取访问应用的AK

注意:这里的创建应用要勾选所需要启用的服务

(2) 查看文档的示例代码并分析

选择自己开发所使用的语言,我这里以Java为例

下面是百度地图的示例代码,观察可以发现要想调用该API只需

  • 将AK修改为自己创建应用的AK
  • 同时创建LinkedHashMap<String,String>对象并添加origins和destinations的纬度,经度
  • 最后调用requestGetAK()方法打印获取JSON格式的结果

注意:示例代码中的URL最后是加上 ' ?' 的,所以自己更改的代码也要考虑加上 ' ?'的问题

public class SearchHttpAK {

    public static String URL = "https://api.map.baidu.com/routematrix/v2/driving?";

    public static String AK = "您的AK";

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

        SearchHttpAK snCal = new SearchHttpAK();

        Map params = new LinkedHashMap<String, String>();
        params.put("origins", "40.45,116.34");
        params.put("destinations", "40.34,116.45");
        params.put("ak", AK);


        snCal.requestGetAK(URL, params);
    }

    /**
     * 默认ak
     * 选择了ak,使用IP白名单校验:
     * 根据您选择的AK已为您生成调用代码
     * 检测到您当前的ak设置了IP白名单校验
     * 您的IP白名单中的IP非公网IP,请设置为公网IP,否则将请求失败
     * 请在IP地址为xxxxxxx的计算发起请求,否则将请求失败
     */
    public void requestGetAK(String strUrl, Map<String, String> param) throws Exception {
        if (strUrl == null || strUrl.length() <= 0 || param == null || param.size() <= 0) {
            return;
        }

        StringBuffer queryString = new StringBuffer();
        queryString.append(strUrl);
        for (Map.Entry<?, ?> pair : param.entrySet()) {
            queryString.append(pair.getKey() + "=");
            //    第一种方式使用的 jdk 自带的转码方式  第二种方式使用的 spring 的转码方法 两种均可
            //    queryString.append(URLEncoder.encode((String) pair.getValue(), "UTF-8").replace("+", "%20") + "&");
            queryString.append(UriUtils.encode((String) pair.getValue(), "UTF-8") + "&");
        }

        if (queryString.length() > 0) {
            queryString.deleteCharAt(queryString.length() - 1);
        }

        java.net.URL url = new URL(queryString.toString());
        System.out.println(queryString.toString());
        URLConnection httpConnection = (HttpURLConnection) url.openConnection();
        httpConnection.connect();

        InputStreamReader isr = new InputStreamReader(httpConnection.getInputStream());
        BufferedReader reader = new BufferedReader(isr);
        StringBuffer buffer = new StringBuffer();
        String line;
        while ((line = reader.readLine()) != null) {
            buffer.append(line);
        }
        reader.close();
        isr.close();
        System.out.println("AK: " + buffer.toString());
    }
}

 

3. 简单改编示例的代码

这里我就修改requestGetAK的代码

  • 我将queryString.append(strUrl);修改为queryString.append(strUrl+"?"); 这样URL就不需要后面还加上一个' ? '。
  • 通过观察文档里的返回 json 格式的结果,后面我通过 fastjson 获取 json 格式里的distance(预计距离,单位:米)和 duration(预计耗时,单位:秒)的值并打印出来。

提示:大家可以根据自己的需要在调用该方法的最后直接获取distance和duration的值

    public String requestGetAK(String strUrl, Map<String, String> param) throws Exception {
        if (strUrl == null || strUrl.length() <= 0 || param == null || param.size() <= 0) {
            return null;
        }

        StringBuffer queryString = new StringBuffer();
        queryString.append(strUrl+"?");
        for (Map.Entry<?, ?> pair : param.entrySet()) {
            queryString.append(pair.getKey() + "=");
            //    第一种方式使用的 jdk 自带的转码方式  第二种方式使用的 spring 的转码方法 两种均可
            //    queryString.append(URLEncoder.encode((String) pair.getValue(), "UTF-8").replace("+", "%20") + "&");
            queryString.append(UriUtils.encode((String) pair.getValue(), "UTF-8") + "&");
        }

        if (queryString.length() > 0) {
            queryString.deleteCharAt(queryString.length() - 1);
        }

        java.net.URL url = new URL(queryString.toString());
        System.out.println(queryString.toString());
        URLConnection httpConnection = (HttpURLConnection) url.openConnection();
        httpConnection.connect();

        InputStreamReader isr = new InputStreamReader(httpConnection.getInputStream());
        BufferedReader reader = new BufferedReader(isr);
        StringBuffer buffer = new StringBuffer();
        String line;
        while ((line = reader.readLine()) != null) {
            buffer.append(line);
        }
        reader.close();
        isr.close();
        System.out.println("AK: " + buffer.toString());
        JSONObject jsonObject = JSONObject.parseObject(buffer.toString());
        // 获取result数组
        JSONObject resultObject = jsonObject.getJSONArray("result").getJSONObject(0);

        // 获取distance和duration的value
        int distanceValue = resultObject.getJSONObject("distance").getIntValue("value");
        int durationValue = resultObject.getJSONObject("duration").getIntValue("value");

        System.out.println("Distance Value: " + distanceValue);
        System.out.println("Duration Value: " + durationValue);
        System.out.println();
        return  buffer.toString();
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

探索星辰大海

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值