在我的应用程序中,我试图计算一个人从一个地方旅行到另一个地方的距离。为此,我使用的是Haversine公式,
R = earth’s radius (mean radius = 6,371km)
Δlat = lat2− lat1
Δlong = long2− long1
a = sin²(Δlat/2) + cos(lat1).cos(lat2).sin²(Δlong/2)
c = 2.atan2(√a, √(1−a))
d = R.c
获取起始位置和到达地点的经度和经度我正在计算以kms为单位的距离。但是其他人说,这种距离计算只有在气道行进时才有效,如果用户通过公路行驶则会有所不同。
如果是这样的话,我怎样才能在穿越道路时获得正确的距离。
请帮助我的朋友
答案 0 :(得分:6)
此方法在标准API(Location.distanceBetween方法)中) http://developer.android.com/reference/android/location/Location.html
答案 1 :(得分:3)
使用以下公式查找两个lat-long之间的距离:
private double calculateDistance(double lat1, double lon1, double lat2, double lon2, String unit)
{
double theta = lon1 - lon2;
double dist = Math.sin(deg2rad(lat1)) * Math.sin(deg2rad(lat2)) + Math.cos(deg2rad(lat1)) * Math.cos(deg2rad(lat2)) * Math.cos(deg2rad(theta));
dist = Math.acos(dist);
dist = rad2deg(dist);
dist = dist * 60 * 1.1515;
if (unit == "K") {
dist = dist * 1.609344;
} else if (unit == "M") {
dist = dist * 0.8684;
}
return (dist);
}
/*:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/
/*:: This function converts decimal degrees to radians :*/
/*:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/
private double deg2rad(double deg)
{
return (deg * Math.PI / 180.0);
}
/*:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/
/*:: This function converts radians to decimal degrees :*/
/*:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/
private double rad2deg(double rad)
{
return (rad * 180.0 / Math.PI);
}
传递lat,long,其中包含您想要距离的功能和单位(公里为“K”,“M”为“M”)。 希望这会对你有所帮助。
答案 2 :(得分:2)
当你乘公路旅行时(即使是通过空中旅行),由于地球不平坦,地球的承载也会发挥作用。但是这个Haversine公式应该已经处理好了。其次,人们可能会说,当你通过公路旅行时,你不会直接在两点之间。你需要很多次。并且为了“精确地”指出两点之间的距离,你可能也想考虑这些转折。
答案 3 :(得分:2)
Location.distanceBetween()
将针对两个纬度经度坐标点执行此操作。
答案 4 :(得分:1)
我在以下链接中找到了示例代码来计算通过道路的距离。
答案 5 :(得分:0)
您需要路线图来计算距离