/**
* @Description
*/
public class DistanceUtils {
private static RestTemplate template = new RestTemplate();
/**
* 地球半径,单位 km
*/
private static final double EARTH_RADIUS = 6378.137;
/**
* @description 根据经纬度,计算两点间的距离
* @param longitude1 第一个点的经度
* @param latitude1 第一个点的纬度
* @param longitude2 第二个点的经度
* @param latitude2 第二个点的纬度
* @return 返回距离 单位千米
*/
public static String getDistance(double longitude1, double latitude1, double longitude2, double latitude2) {
// 纬度
double lat1 = Math.toRadians(latitude1);
double lat2 = Math.toRadians(latitude2);
// 经度
double lng1 = Math.toRadians(longitude1);
double lng2 = Math.toRadians(longitude2);
// 纬度之差
double a = lat1 - lat2;
// 经度之差
double b = lng1 - lng2;
// 计算两点距离的公式
double s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2) +
Math.cos(lat1) * Math.cos(lat2) * Math.pow(Math.sin(b / 2), 2)));
// 弧长乘地球半径, 返回单位: 千米
s = s * EARTH_RADIUS * 1000;
String distance = String.format("%.0f", s);
System.out.println("距离是:"+distance);
return distance;
}
public static void main(String[] args) {
DistanceUtils.distance("121.624755","38.866778","121.527817","38.869729","0");
DistanceUtils.getDistance(121.624755,38.866778,121.527817,38.869729);
}
/**
* @description 调用高德地图的api
* @params [longitude1, latitude1, longitude2, latitude2, type]
* 0:直线距离
* 1:驾车导航距离(仅支持国内坐标)。
* 必须指出,当为1时会考虑路况,故在不同时间请求返回结果可能不同。
* 此策略和驾车路径规划接口的 strategy=4策略基本一致,策略为“ 躲避拥堵的路线,但是可能会存在绕路的情况,耗时可能较长 ”
* 若需要实现高德地图客户端效果,可以考虑使用驾车路径规划接口
* 2:公交规划距离(仅支持同城坐标,QPS不可超过1,否则可能导致意外)
* 3:步行规划距离(仅支持5km之间的距离)
* @return java.lang.String 返回距离
*/
public static String distance(String longitude1 , String latitude1,String longitude2 , String latitude2,String type){
String distance = null;
StringBuilder path = new StringBuilder();
String url = "https://restapi.amap.com/v3/distance";
String origins = longitude1+","+latitude1;
String destination = longitude2+","+latitude2;
if(type == null) type = "0";
path.append(url);
path.append("?");
path.append("origins="+origins);
path.append("&");
path.append("destination="+destination);
path.append("&");
path.append("type="+type);
path.append("&");
path.append("key=exxxe");
String result = template.getForObject(path.toString(), String.class);
if(result != null){
Map map = JSONObject.fromObject(result);
if(map.get("status").equals("1")){
List list = (List) map.get("results");
Map results = JSONObject.fromObject(list.get(0));
distance = (String)results.get("distance");
System.out.println("距离是:"+distance);
}
}
return distance;
}
}
java根据经纬度计算两点距离
猜你喜欢
转载自blog.csdn.net/hejunfei/article/details/95938519
今日推荐
周排行