计算两个经纬度之间的道路距离

Posted

技术标签:

【中文标题】计算两个经纬度之间的道路距离【英文标题】:Calculate road distance between two longitudes and latitudes 【发布时间】:2015-05-11 19:56:22 【问题描述】:

我正在尝试开发一个安卓应用程序。我在我的后端(php mysql)中列出了一些地方的经度/纬度和其他描述。我正在尝试获取用户的当前位置,并向他展示到这些列出地点的道路距离及其描述。但是我很难找到从当前位置到所有其他地方的道路距离。我想一种方法是使用Google Distance Matrix API 但在这种情况下会有两个 API 调用,

第一个从我的设备到我的后端。 第二个是从后端到 Google 距离矩阵 API

然后我的后端将向我的设备发送响应。为此目的调用两个 API 是个好主意吗?还有没有其他方法可以轻松做到这一点。我是开发新手,如果我错了,请原谅我。

谢谢。

【问题讨论】:

除非您拥有每条道路的 gps 坐标并且能够通过这些道路追踪最佳路径以获得您的距离,否则您将不得不进行两次 api 调用。除非有某种方法可以直接从您的应用调用 google。 我不太了解那个api,但你不能直接从设备调用它吗? 即使我直接调用google API,我也必须先从我的服务器获取地点列表及其详细信息。因此,为了一个目的再次调用 2 个 API。 【参考方案1】:
public float distance(double lat1, double lng1, double lat2, double lng2) 
    double earthRadius = 6371; // kilometers
    double dLat = Math.toRadians(lat2 - lat1);
    double dLng = Math.toRadians(lng2 - lng1);
    double a = Math.sin(dLat / 2) * Math.sin(dLat / 2) + Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2)) * Math.sin(dLng / 2)
            * Math.sin(dLng / 2);
    double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
    float dist = (float) (earthRadius * c);

    return dist * 1000;

现在调用您的代码

float distanceInMeters= distance(oldLatitude, oldLongitude,newLatitude, newLongitude);

【讨论】:

这是公路距离还是两个经纬度之间的正常距离? 对不起。这是纬度。但它也适用于路线。为此,只需使用返回路径的值调用此函数 谢谢。但我不知道什么是“返回路线”。你能解释一下吗?

以上是关于计算两个经纬度之间的道路距离的主要内容,如果未能解决你的问题,请参考以下文章

php计算两个经纬度之间的距离问题,求指导

如何使用php计算出两个经纬度之间的距离

怎样计算两个经纬度之间的距离 百度百科

怎样计算两个经纬度之间的距离 百度百科

计算两个经纬度之间的距离

如何计算两个经纬度之间的距离[重复]