如何在android应用程序中计算两点之间的距离
Posted
技术标签:
【中文标题】如何在android应用程序中计算两点之间的距离【英文标题】:how to calculate the distance between two points in android app 【发布时间】:2011-08-10 00:44:11 【问题描述】:在我的应用程序中,我试图计算一个人从一个地方到另一个地方的距离。为此,我使用的是 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
获取起始地点和到达地点的纬度和经度,我正在计算以公里为单位的距离。但是其他人说,这种距离计算仅在通过航空旅行时才有效,并且如果用户通过公路旅行,则得到的结果会有所不同。
如果是这样,我如何在通过公路时获得正确的距离。
请朋友们帮帮我
【问题讨论】:
你想计算两个 GeoPoints 之间的距离吗? 该死,我刚刚把 2atan 读成了撒旦:D 【参考方案1】:此方法在标准 API 中(Location.distanceBetween 方法)) http://developer.android.com/reference/android/location/Location.html
【讨论】:
【参考方案2】:使用以下公式求两个经纬度之间的距离:
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,longs 传递您想要距离的函数和单位(“K”代表公里,“M”代表英里)。 希望这会对你有所帮助。
【讨论】:
【参考方案3】:Location.distanceBetween()
将对两个纬度经度坐标点执行此操作。
【讨论】:
【参考方案4】:当您通过公路旅行时(即使是通过航空旅行),由于地球不是平坦的,因此地球的方位会发挥作用。但是这个 Haversine 公式应该已经处理好了。其次,人们可能一直在说,当你通过公路旅行时,你不会直接在两点之间走。你需要转很多圈。为了“准确”地判断两点之间的距离,您可能还需要考虑这些转弯。
【讨论】:
【参考方案5】:我在以下链接中找到了示例代码来计算通过道路的距离。
http://code.google.com/p/krvarma-android-samples/source/browse/#svn/trunk/GPSSample%253Fstate%253Dclosed
【讨论】:
【参考方案6】:似乎距离通过 radways 更大,因为火车和卡车不是沿直线行驶,而是飞机沿直线行驶。
你需要路线图来产生计算距离
【讨论】:
以上是关于如何在android应用程序中计算两点之间的距离的主要内容,如果未能解决你的问题,请参考以下文章