使用百度地图规划两地之间的路线

该文章介绍了一个Java编写的百度地图工具类,用于获取地址的经纬度和计算两地之间的距离。通过调用百度地图API,进行逆地址编码和路线规划,并展示了如何处理返回的数据。工具类中包含了获取纬度和经度的方法以及计算距离的方法,使用了HTTP客户端库进行网络请求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

准备工作

登录百度地图



登录之后点击工具台去完成开发者认证

 


然后点击我的应用,去创建一个应用。

选择自己要使用的服务开启。

注意

这个白名单要填写 0.0.0.0/0 不然访问会被拒绝

创建好之后会得到AK值就是我们的密钥,需要使用它来获取连接

 

工具类

 

 


自己整理成一个工具类,其中我只得到了两地之间的距离,需要得到什么数据可以自己从返回的数据里面自己提取。

package com.sky.utils;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.sky.constant.MessageConstant;
import com.sky.exception.OrderBusinessException;
import com.sky.properties.ShopAddress;
import com.sky.properties.WeChatProperties;
import com.wechat.pay.contrib.apache.httpclient.WechatPayHttpClientBuilder;
import com.wechat.pay.contrib.apache.httpclient.util.PemUtil;
import org.apache.commons.lang.RandomStringUtils;
import org.apache.http.HttpHeaders;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.util.EntityUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.math.BigDecimal;
import java.security.PrivateKey;
import java.security.Signature;
import java.security.cert.X509Certificate;
import java.util.*;

/**
 * 百度地图工具类
 */
@Component
public class BaiduMapUtil {

    @Autowired
    private ShopAddress shopAddress;
    //逆地址编码网址
    private final static String URL="https://api.map.baidu.com/geocoding/v3";
    //路线规划网址
    //这个只是骑行的规划路线 需要其他比如驾车路线规划可以自己去官网查找路线 https://lbsyun.baidu.com/index.php?title=webapi/directionlite-v1
    private final static String URL1="https://api.map.baidu.com/directionlite/v1/riding";

    /**
     * 得到地址的维度和经度组成的字符串
     * @return
     */
    public String getLatandLng(String address){
       Map<String, String> paramMap=new HashMap<>();
       //?address=北京市海淀区上地十街10号&output=json&ak=您的ak&callback=showLocation
       paramMap.put("address",address);//你的地址信息
       paramMap.put("output","json");
       paramMap.put("ak",shopAddress.getAk());//你的百度地图 AK 我是创建了一个自定义类专门存储了
       String doGet = HttpClientUtil.doGet(URL, paramMap);

       System.out.println("String格式为:"+doGet);
       JSONObject jsonObject = JSON.parseObject(doGet);
       JSONObject result = (JSONObject) jsonObject.get("result");
       JSONObject location = (JSONObject) result.get("location");
       Object lat = location.get("lat");//纬度值
       Object lng = location.get("lng");//经度值
//       System.out.println("纬度值 为:"+lat);
//       System.out.println("经度值 为:"+lng);
        //将经纬度拼接成一个字符串,路线规划时需要用到
       String latlng=lat+","+lng;
       return latlng;
   }

    /**
     * 根据两地的经纬度得到距离
     * @param origin
     * @param destination
     * @return
     */
    public Integer getGap(String origin,String destination){
       Map<String, String> paramMap2=new HashMap<>();

       paramMap2.put("origin",origin);
       paramMap2.put("destination",destination);
       paramMap2.put("ak",shopAddress.getAk());

       String doGet2 = HttpClientUtil.doGet(URL1, paramMap2);
       JSONObject jsonObject2 = JSON.parseObject(doGet2);
//    需要什么信息可以从这个数据中提取
//       System.out.println("百度地图返回的数据信息:"+jsonObject2);
       //因为是骑行路线规划 所以距离太远就规划不了路线了
        if ((Integer) jsonObject2.get("status")!=0){
            throw new OrderBusinessException("路线规划失败!");//自定义的异常类 使用别的异常类亦可以
        }
       JSONObject res = (JSONObject) jsonObject2.get("result");
//        
       List<Object> routes = (List<Object>) res.get("routes");

       JSONObject message = (JSONObject) routes.get(0);
       //从返回的数据中精准得到相隔距离
       Integer distance = (Integer) message.get("distance");
       return distance;
   }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值