准备工作
登录百度地图
登录之后点击工具台去完成开发者认证
然后点击我的应用,去创建一个应用。
选择自己要使用的服务开启。
注意
这个白名单要填写 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;
}
}