以下两行计算lat和lng
double geoLat = location.getLatitude(); // 37.422006
double geoLng = location.getLongitude(); // -122.084095
在循环中,我计算地理点之间的距离数组。 latitude [i]和经度[i]来自google map api的json响应
distance[i]=GetLatAndLng.gps2m(geoLat, geoLng,latitude[i] ,longitude[i]);
这是gps2m方法。
public static double gps2m(double lat1, double lng1, double lat2, double lng2) {
double l1 = Math.toRadians(lat1);
double l2 = Math.toRadians(lat2);
double g1 = Math.toRadians(lng1);
double g2 = Math.toRadians(lng2);
double dist = Math.acos(Math.sin(l1) * Math.sin(l2) + Math.cos(l1) * Math.cos(l2) * Math.cos(g1 - g2));
if(dist < 0) {
dist = dist + Math.PI;
}
return Math.round(dist * 6378100);//in meters
}
}
在距离数组中我得到的值如1.1967617E7 我想要以米为单位的距离
出了什么问题以及如何以米为单位。
帮助!!
答案 0 :(得分:5)
您可以使用Location类。您可以通过两种方式计算距离:
location.distanceTo(anotherLocation);
或
Location.distanceBetween(double startLatitude, double startLongitude, double endLatitude, double endLongitude, float[] results);
请查看Location documentation了解详情。
答案 1 :(得分:4)
这是我的代码:
int EARTH_RADIUS_KM = 6371;
double lat1,lon1,lat2,lon2,lat1Rad,lat2Rad,deltaLonRad,dist,nDist;
lat1 = latitude of location 1
lon1 = longitude of location 1
lat2 = latitude of location 2
lon2 = longitude of location 2
lat1Rad = Math.toRadians(lat1);
lat2Rad = Math.toRadians(lat2);
deltaLonRad = Math.toRadians(lon2 - lon1);
dist = Math.acos(Math.sin(lat1Rad) * Math.sin(lat2Rad) + Math.cos(lat1Rad) * Math.cos(lat2Rad) * Math.cos(deltaLonRad)) * EARTH_RADIUS_KM;
nDist = Math.round(dist*0.62);
String strDistance = Double.toString(nDist)+" Miles";
你获得的分数是双倍和KM,你可能想要收集你得到的值,使用Math.round(dist*0.62);
* 0.62是将KM转换为里程。