没有什么需要导入的包,都是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);
}
已经写的很简单了,没有可能看不懂得吧。