根据经纬度计算两点之间的距离
经纬度计算有各种计算方式,一般误差也各不相同。个人觉着结合地球半径的计算方法可能靠谱一些,但是具体的计算公式是怎么来的,就不清楚,不知道谁提出的。下面给出一个计算方法和[经纬度查询][Link 1]网站上的查询结果很接近了。
下面给出代码,并附上运行的结果:
package com.xxx.javaee.common;
public class DistanceCalculate {
//地球半径
private static final double R = 6378.137d;
public static double radius(double d) {
return d * Math.PI / 180.0;
}
public static double getDistanceByR(Point a,Point b) {
double distance = 0;
double lata = radius(a.latitude);
double latb = radius(b.latitude);
double latd = lata - latb;
double lond = radius(a.longitude-b.longitude);
double sina = Math.sin(latd/2.0);
double sinb = Math.sin(lond/2.0);
distance = 2 * R * Math.asin(Math.sqrt(sina*sina+Math.cos(lata)*Math.cos(latb)*sinb*sinb));
return distance;
}
public static void main(String[] args) {
Point a = new Point(116.4028930664d,39.9034155951d);
Point b = new Point(114.3347167969d,30.5433389542d);
System.out.println("distance by radius : "+getDistanceByR(a, b));
}
}
class Point{
double longitude;//经度
double latitude; //纬度
public Point() {}
public Point(double longitude,double latitude) {
this.longitude = longitude;
this.latitude = latitude;
}
}
这里给出的示例是粗略计算北京到武汉的直线距离,经纬度都定位在北京和武汉的中心位置,他们的经纬度分别是:北京(116.4028930664d,39.9034155951d)与武汉(114.3347167969d,30.5433389542d)。
运行程序得到的结果如下:
我这里计算的是大概1058公里,我们通过前面提到的gps查询网站的数据来对比一下:
准确输入两点的纬度和经度,点击提交得到:
距离是1057公里,误差有一些,但是相对来说已经比较准了,对于一般的应用来说够用了。
还没有评论,来说两句吧...