0

ランニングとウォーキングを追跡するアプリケーションを構築していますが、合計距離の計算に問題があります。

これは、緯度と経度の値を取得し、距離の計算を行うコードの一部です。

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 前後で増加し (メートル単位かどうかはわかりません)、得られる値は正しくないように見えます。

4

2 に答える 2

0

Google 公式リポジトリのリンクから

SphericalUtil

MathUtil

使用法

 double distance = SphericalUtil.computeDistanceBetween(new LatLng(9.000,10.00), new LatLng(9.000,11.00));

上記のメソッドは、2 つの 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;

}

または、リンクを見ることができます

于 2015-11-25T05:26:12.030 に答える