计算两个经纬度之间的道路距离
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);
【讨论】:
这是公路距离还是两个经纬度之间的正常距离? 对不起。这是纬度。但它也适用于路线。为此,只需使用返回路径的值调用此函数 谢谢。但我不知道什么是“返回路线”。你能解释一下吗?以上是关于计算两个经纬度之间的道路距离的主要内容,如果未能解决你的问题,请参考以下文章