使用腾讯地图接口,计算汽车行驶距离或者步行行驶距离

 

没有什么需要导入的包,都是jdk自带包包,哦,json要自己导入哦。

使用maven的话

地址:http://maven.aliyun.com/

<!-- json -->
<dependency>
   <groupId>net.sf.json-lib</groupId>
   <artifactId>json-lib-ext-spring</artifactId>
   <version>1.0.2</version>
</dependency>

放进去生成下就好了,别跟我说maven仓库都没配置不会自动下载,怎么配我不管哈

第一步 先创建一个工具类(我喜欢吧腾讯所有的api接口都做成一个工具类,个人喜欢\(^o^)/~)

public class TencentMapAPIUtils {

    //访问腾讯地图接口KEY
    private static final String KEY = 找腾讯平台注册获取;


    /**
     * 计算腾讯地图距离
     * @param max 几个终点
     * @param from 起点起点坐标,格式:lat,lng;lat,lng...
     * (经度与纬度用英文逗号分隔,坐标间用英文分号分隔)
     * @param to 终点(可以传入多个终点坐标,格式:lat,lng;lat,lng...
     * (经度与纬度用英文逗号分隔,坐标间用英文分号分隔)
     * 注意:本服务支持单起点到多终点,或多起点到单终点,from和to参数仅可有一个为多坐标)
     * 例如:传入22.566939,114.072762;22.540940,114.061432;22.556635,114.086151;22.518266,114.068813
     * @return 距离
     */
    public static Double[] getLocation(int max,String from,String to) {

        Double[] distances = new Double[max];

        //请求路径
        String getURL = "http://apis.map.qq.com/ws/distance/v1/";
        //计算方式:driving(驾车)、walking(步行)默认:driving
        String mode ="driving";
        //返回格式:支持JSON/JSONP,默认JSON (非必填项)
        //String output = "";
        //JSONP方式回调函数  (非必填项)
        //String callback = "";
        //请求路径
        String urlString =getURL+"?mode="+mode+"&from="+from+"&to="+to+"&key="+KEY;
        //接收腾讯回传的地址解析结果
        String result = "";
        try {
            URL url = new URL(urlString);
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setDoOutput(true);
            // 腾讯地图使用GET
            conn.setRequestMethod("GET");
            BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
            String line;
            // 获取地址解析结果
            while ((line = in.readLine()) != null) {
                result += line + "\n";
                System.out.println(result);
            }
            in.close();
        } catch (Exception e) {
            e.getMessage();
        }
        // 转JSON格式
        JSONObject jsonObject = JSONObject.fromObject(result).getJSONObject("result");
        //elements是[](数组格式)所以使用JSONArray获取
        JSONArray adInfo = jsonObject.getJSONArray("elements");
        //for数组
        for (int j = 0; j < adInfo.size(); j++) {
            JSONObject jsonObject2 = adInfo.getJSONObject(j);
            //获取距离(获取到的是m为单位)
            String distance = jsonObject2.getString("distance");
            double distanceD = Double.valueOf(distance);
            //转化为km
            distanceD = distanceD / 1000;
            distances[j] = distanceD;
        }
        return distances;
    }

}

第二步 我是直接到controller 层调用该工具(写好了工具不就是用来调用的么,你们有跟好的返回方式就用自己的咯,反正我穿double,不准说我\(^o^)/~)

 

/**
 * 查询所有
 *
 * @return
 */
@RequestMapping(value = "", method = RequestMethod.GET)
public ResponseEntity<List<Store>> index(String fromStart) {
    //从数据库读取出来的List,怎么查我就不说了吧,这已经是不能再基础的东西了,我是jpa自带的查询方法
    List<Store> stores = storeService.findAll();
    //获取金纬度拼接一段
    String[] ary = new String[stores.size()];

    for (int i = 0;i<stores.size();i++){
        Store store=stores.get(i);
        //纬度
        String lat = store.getLatitude();
        //经度
        String lng = store.getLongitude();
        ary[i]=lat+","+lng;
    }
    //拼接数组
    StringBuffer sb = new StringBuffer();
    //如果终点经纬度只有一个值就不做 ; 区分
    if(ary.length > 1) {
        for (int i = 0; i < ary.length; i++) {
            if(i>0)
            sb.append(";"+ary[i].trim());
        }
    }else
        sb.append(ary[0]);
    LOGGER.info("拼接出来的to:"+sb.toString());
    Double[] kms = TencentMapAPIUtils.getLocation(stores.size(),fromStart,sb.toString());
    //存入store的km
    for (int i = 0;i<stores.size();i++){
        stores.get(i).setKm(kms[i]);
    }
    return ResponseEntity.ok().body(stores);
}

已经写的很简单了,没有可能看不懂得吧。

 

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

assassin丶J

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

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

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

打赏作者

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

抵扣说明:

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

余额充值