获取 android 中两个位置之间的距离但不起作用
Getting distance between Two Locations in android but not working
其实我想得到两个lat和lang之间的精确距离。但是我尝试了三种不同的功能,但都没有给我正确的距离。
代码如下:
private double distance(double lat1, double lon1, double lat2, double lon2) {
//first formula
Location startPoint=new Location("locationA");
startPoint.setLatitude(lat1);
startPoint.setLongitude(lon1);
Location endPoint=new Location("locationA");
endPoint.setLatitude(lat2);
endPoint.setLongitude(lon2);
double distancee=startPoint.distanceTo(endPoint);
// second formula
float[] results=new float[1];
Location.distanceBetween( lat1, lon1, lat2, lon2, results);
float result= 0;
if (results != null) {
result = results[0];
}
double dvar=(double)result;
//third formula
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;
return (distancee);
}
private double deg2rad(double deg) {
return (deg * Math.PI / 180.0);
}
private double rad2deg(double rad) {
return (rad * 180.0 / Math.PI);
}
这些都没有给我正确的距离请指导我如何实现这个目标
您得到的距离是两点之间的直线,正如您使用 GoogleMaps
中的工具所发现的那样,它是正确的。为了获得考虑到道路和其他一切的距离,您将不得不使用 Google Directions Api. You will need to make an HTTP Request using Retrofit
or OkHttp
或其他东西。
在你的请求中,你需要提供起点和终点作为回应,你会得到一堆信息,包括距离,你可以在我链接的文档网站上找到更多信息。
其实我想得到两个lat和lang之间的精确距离。但是我尝试了三种不同的功能,但都没有给我正确的距离。
代码如下:
private double distance(double lat1, double lon1, double lat2, double lon2) {
//first formula
Location startPoint=new Location("locationA");
startPoint.setLatitude(lat1);
startPoint.setLongitude(lon1);
Location endPoint=new Location("locationA");
endPoint.setLatitude(lat2);
endPoint.setLongitude(lon2);
double distancee=startPoint.distanceTo(endPoint);
// second formula
float[] results=new float[1];
Location.distanceBetween( lat1, lon1, lat2, lon2, results);
float result= 0;
if (results != null) {
result = results[0];
}
double dvar=(double)result;
//third formula
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;
return (distancee);
}
private double deg2rad(double deg) {
return (deg * Math.PI / 180.0);
}
private double rad2deg(double rad) {
return (rad * 180.0 / Math.PI);
}
这些都没有给我正确的距离请指导我如何实现这个目标
您得到的距离是两点之间的直线,正如您使用 GoogleMaps
中的工具所发现的那样,它是正确的。为了获得考虑到道路和其他一切的距离,您将不得不使用 Google Directions Api. You will need to make an HTTP Request using Retrofit
or OkHttp
或其他东西。
在你的请求中,你需要提供起点和终点作为回应,你会得到一堆信息,包括距离,你可以在我链接的文档网站上找到更多信息。