我正在构建一个跟踪我的跑步和步行的应用程序,但是我在计算总距离方面遇到了一些麻烦。
这是我的代码的一部分,我得到纬度和经度的值,以及我在哪里计算距离。
public class SportsActicity {
protected Integer userId;
protected ArrayList<Position> route = new ArrayList<Position>();
public SportsActicity() {
this.userId = 1;
}
public void track(Double latitude, Double longitude, Double altitude, float speed, long chron) {
Date currentDate = new Date();
Position currentPosition = new Position(currentDate, latitude, longitude, altitude, speed, chron);
route.add(currentPosition);
// Float velocidade = (locat.getSpeed()*3600)/1000;
}
public double getTotalDistance() {
double distance = 0;
if(route.size() > 1) {
for (Integer i = 0; i < route.size() - 1; i++) {
distance += test(route.get(i).latitude, route.get(i).longitude, route.get(i + 1).latitude, route.get(i + 1).longitude);
}
}
return distance;
}
public Float test(Double lat1, Double lon1, Double lat2, Double lon2) {
double earthRadius = 6371;
double latDiff = Math.toRadians(lat2-lat1);
double lngDiff = Math.toRadians(lon2-lon1);
double a = Math.sin(latDiff /2) * Math.sin(latDiff /2) +
Math.cos(Math.toRadians(lat1))*
Math.cos(Math.toRadians(lat2))* Math.sin(lngDiff /2) *
Math.sin(lngDiff /2);
double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
double distance = earthRadius * c;
int meterConversion = 1609;
return new Float(distance * meterConversion).floatValue();
}
如果我没有移动,总距离总是递增,大约10(不知道是否以米为单位),并且我得到的值看起来不正确。
答案 0 :(得分:0)
您可以使用Location's
静态方法distanceBetween
代替整个test
方法。
int[] results = new int[1];
Location.distanceBetween(lat1, lon1, lat2, lon2, results);
int distance = results[0];
答案 1 :(得分:0)
来自Google官方存储库link
<强>用法强>
double distance = SphericalUtil.computeDistanceBetween(new LatLng(9.000,10.00), new LatLng(9.000,11.00));
上述方法将返回两个LatLng之间的距离,以米为单位。 或尝试此
private String getDistance(LatLng my_latlong,LatLng frnd_latlong){
Location l1=new Location("One");
l1.setLatitude(my_latlong.latitude);
l1.setLongitude(my_latlong.longitude);
Location l2=new Location("Two");
l2.setLatitude(frnd_latlong.latitude);
l2.setLongitude(frnd_latlong.longitude);
float distance=l1.distanceTo(l2);
String dist=distance+" M";
if(distance>1000.0f)
{
distance=distance/1000.0f;
dist=distance+" KM";
}
return dist;
}
或者您可以查看link