经纬度两点之间的距离AND车距
直线距离:
1.工具类
class MapUtils{
private static double EARTH_RADIUS = 6371.393;
private static double rad(double d)
{
return d * Math.PI / 180.0;
}
/**
* 计算两个经纬度之间的距离
* @param lat1
* @param lng1
* @param lat2
* @param lng2
* @return
*/
public static double GetDistance(double lat1, double lng1, double lat2, double lng2)
{
double radLat1 = rad(lat1);
double radLat2 = rad(lat2);
double a = radLat1 - radLat2;
double b = rad(lng1) - rad(lng2);
double s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a/2),2) +
Math.cos(radLat1)*Math.cos(radLat2)*Math.pow(Math.sin(b/2),2)));
s = s * EARTH_RADIUS;
s = Math.round(s * 1000);
return s;
}
}
2.测试类:
public static void main(String[] args) throws IOException {
System.err.println(MapUtils.GetDistance(40.8515,111.6164,40.8548,111.655));
}
3.结果(米)
3267.0
车距:
1.工具类:
class MeasureUtil{
private final static String DRIVING = "http://api.map.baidu.com/routematrix/v2/driving?output=json&tactics=12&ak=";
public static String getDistance(String appkey, LatLng from, LatLng to)
throws IOException {
StringBuilder result = new StringBuilder();
URL url = new URL(getURL(appkey, from, to));
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setDoInput(true);
conn.setDoOutput(true);
conn.setUseCaches(false);
conn.connect();
BufferedReader bReader = new BufferedReader(new InputStreamReader(
conn.getInputStream(), "utf-8"));
String str = null;
while ((str = bReader.readLine()) != null) {
result.append(str);
}
bReader.close();
conn.disconnect();
return result.toString();
}
private static String getURL(String appkey, LatLng from, LatLng to) {
StringBuilder url = new StringBuilder(DRIVING);
url.append(appkey);
if (from != null) {
url.append("&origins=");
url.append(from.getLat()).append(",").append(from.getLng());
}
if (to != null) {
url.append("&destinations=");
url.append(to.getLat()).append(",").append(to.getLng());
}
return url.toString();
}
}
2.测试类:
public static void main(String[] args) throws IOException {
LatLng from = new LatLng();
from.setLat(39.914935);
from.setLng(116.405994);
LatLng to = new LatLng();
to.setLat(39.914492);
to.setLng(116.46636);
System.out.println(MeasureUtil.getDistance(百度密钥, from, to));
}
3.结果:
{"status":0,"result":[{"distance":{"text":"6.5公里","value":6461},"duration":{"text":"17分钟","value":1004}}],"message":"成功"}
使用百度api测试车距可以自定义返回类型,在这里我定义的是返回json
我是努力奋斗的小猿,希望我们可以一起成长。