Java 计算从直线到点的地理距离

Java 计算从直线到点的地理距离,java,android,location,distance,Java,Android,Location,Distance,我有一个论坛上的代码段,它用来计算从一条直线到一个点的距离。问题是我不知道返回结果的度量单位。代码如下: private double distanceFromLineToPoint(Point A, Point B, Point C){ //A-B the line, C the point double lat1=A.latitude; double lon1=A.longitude; double lat2=B.latitude; double l

我有一个论坛上的代码段,它用来计算从一条直线到一个点的距离。问题是我不知道返回结果的度量单位。代码如下:

private double distanceFromLineToPoint(Point A, Point B, Point C){ //A-B the line, C the point

     double lat1=A.latitude;
     double lon1=A.longitude;
     double lat2=B.latitude;
     double lon2=B.longitude;
     double lat3=C.latitude;
     double lon3=C.longitude;
     double EARTH_RADIUS_KM=6371;

     double y=Math.sin(lon3-lon1)*Math.cos(lat3);
     double x = Math.cos(lat1) * Math.sin(lat3) - Math.sin(lat1) * Math.cos(lat3) * Math.cos(lat3 - lat1);
     double bearing1=Math.toDegrees(Math.atan2(y,x));
     bearing1=360-(bearing1+360%360);

     double y2 = Math.sin(lon2 - lon1) * Math.cos(lat2);
     double x2 = Math.cos(lat1) * Math.sin(lat2) - Math.sin(lat1) * Math.cos(lat2) * Math.cos(lat2 - lat1);
     double bearing2 = Math.toDegrees(Math.atan2(y2, x2));
     bearing2 = 360 - (bearing2 + 360 % 360);

     double lat1Rads = Math.toRadians(lat1);
     double lat3Rads = Math.toRadians(lat3);
     double dLon = Math.toRadians(lon3 - lon1);

     double distanceAC = Math.acos(Math.sin(lat1Rads) * Math.sin(lat3Rads)+Math.cos(lat1Rads)*Math.cos(lat3Rads)*Math.cos(dLon)) * EARTH_RADIUS_KM;
     return (Math.abs(Math.asin(Math.sin(distanceAC/EARTH_RADIUS_KM)*Math.sin(Math.toRadians(bearing1)-Math.toRadians(bearing2))) * EARTH_RADIUS_KM));

}

6371
是以公里为单位的地球半径,所以可能是这样。我真希望人们能用像
地球半径\u KM
这样的常数来代替神奇的数字。我已经编辑过了,谢谢你的建议。也许你已经找到了解决方案?