2024-03-19 17:36:28 +08:00
|
|
|
|
package com.zhgd.xmgl.util;
|
|
|
|
|
|
|
|
|
|
|
|
import cn.hutool.core.convert.Convert;
|
2024-03-20 10:27:49 +08:00
|
|
|
|
import cn.hutool.http.Header;
|
|
|
|
|
|
import cn.hutool.http.HttpRequest;
|
2024-03-25 15:13:09 +08:00
|
|
|
|
import lombok.extern.slf4j.Slf4j;
|
2024-03-19 17:36:28 +08:00
|
|
|
|
|
|
|
|
|
|
import java.util.regex.Matcher;
|
|
|
|
|
|
import java.util.regex.Pattern;
|
|
|
|
|
|
|
2024-03-25 15:13:09 +08:00
|
|
|
|
@Slf4j
|
2024-03-19 17:36:28 +08:00
|
|
|
|
public class TiandituUtil {
|
|
|
|
|
|
static Pattern pattern = Pattern.compile("<distance>(.*)</distance>");
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 查询轨迹距离
|
|
|
|
|
|
*
|
|
|
|
|
|
* @param orig string 起点经纬度 是 -180,-90,180,90。
|
|
|
|
|
|
* @param dest string 终点经纬度 是 -180,-90,180,90。
|
|
|
|
|
|
* @param mid 途径点经纬度字符串 否 途径点字符串格式:116.35506,39.92277;116.35506,39.92277两个坐标之间以分号隔开,坐标xy之间用逗号隔开(都是半角)。
|
|
|
|
|
|
* @param style 导航路线类型 默认0 (0:最快路线,1:最短路线,2:避开高速,3:步行) 0-3。
|
2024-03-20 10:27:49 +08:00
|
|
|
|
* @return 单位km
|
2024-03-19 17:36:28 +08:00
|
|
|
|
*/
|
|
|
|
|
|
public static Double getDistance(String orig, String dest, String mid, Integer style) {
|
|
|
|
|
|
String key = "000c3ade82b69dee54ac334e750cfac0";
|
2024-03-25 15:13:09 +08:00
|
|
|
|
String url = "http://api.tianditu.gov.cn/drive?type=search&tk=" + key;
|
2024-03-20 10:27:49 +08:00
|
|
|
|
//String url = "http://api.tianditu.gov.cn/drive?postStr={\"orig\":\"116.35506,39.92277\",\"dest\":\"116.39751,39.90854\",\"mid\":\"116.36506,39.91277;116.37506,39.92077\",\"style\":\"0\"}&type=search&tk=000c3ade82b69dee54ac334e750cfac0";
|
2024-03-25 15:13:09 +08:00
|
|
|
|
log.info("查询轨迹距离:url:{}", url);
|
|
|
|
|
|
String rs = HttpRequest.post(url)
|
2024-03-20 10:27:49 +08:00
|
|
|
|
.header(Header.USER_AGENT, "PostmanRuntime/7.37.0")//头信息,多个头信息多次调用此方法即可
|
2024-03-25 15:13:09 +08:00
|
|
|
|
.form("postStr", "{\"orig\":\"" + orig + "\",\"dest\":\"" + dest + "\",\"mid\":\"" + mid + "\",\"style\":\"" + style + "\"}")
|
2024-03-20 10:27:49 +08:00
|
|
|
|
.timeout(20000)//超时,毫秒
|
|
|
|
|
|
.execute().body();
|
2024-03-25 15:13:09 +08:00
|
|
|
|
log.info("查询轨迹距离:rs:{}", rs);
|
2024-03-19 17:36:28 +08:00
|
|
|
|
Matcher matcher = pattern.matcher(rs);
|
|
|
|
|
|
matcher.find();
|
2024-03-20 10:27:49 +08:00
|
|
|
|
return Convert.toDouble(matcher.group(1));
|
2024-03-19 17:36:28 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public static void main(String[] args) {
|
|
|
|
|
|
Double distance = getDistance("116.35506,39.92277", "116.40332,39.90025", "116.35506,39.92277;116.35506,39.92277", 0);
|
|
|
|
|
|
System.out.println(distance);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|