2

到目前爲止,我已經從我經過的路徑每隔5秒鐘將所有經緯度集合插入到我的數據庫中。計算Google Maps API V3在Android中的總行程距離

現在到達目的地後,我必須計算緯度,經度組的距離。這不是計算兩點之間的行駛距離,而是從我的數據庫中獲得從一組lat延伸出的總距離。

我曾經想過通過得到兩個點 並把它們加起來之間的距離,最後

計算總距離的方法有沒有比這更好的解決辦法?請建議和幫助

已經閱讀this SO post,但沒有得到我將如何使用谷歌地圖距離矩陣API

///////服務插入座標到數據庫中獲得的總距離。

private class MyReceiver extends BroadcastReceiver { 
     @Override 
     public void onReceive(Context arg0, Intent arg1) { 
      String name = arg1.getAction(); 
      if (name.equalsIgnoreCase("Location_Changed")) { 
       db.insertlatlong(new Latilongi(arg1.getStringExtra("latitude"), 
         arg1.getStringExtra("longitude"),currentDateandTime)); 


        } else if (arg1.getAction().matches("android.location.PROVIDERS_CHANGED")) { 
       Toast.makeText(MapActivity.this, "in android.location.PROVIDERS_CHANGED", 
         Toast.LENGTH_SHORT).show(); 
      } 
     } 
    } 

回答

0

你可以用下面的方法,這將使你acurate的結果

public double CalculationByDistance(LatLng StartP, LatLng EndP) { 
     int Radius = 6371;// radius of earth in Km 
     double lat1 = StartP.latitude; 
     double lat2 = EndP.latitude; 
     double lon1 = StartP.longitude; 
     double lon2 = EndP.longitude; 
     double dLat = Math.toRadians(lat2 - lat1); 
     double dLon = Math.toRadians(lon2 - lon1); 
     double a = Math.sin(dLat/2) * Math.sin(dLat/2) 
       + Math.cos(Math.toRadians(lat1)) 
       * Math.cos(Math.toRadians(lat2)) * Math.sin(dLon/2) 
       * Math.sin(dLon/2); 
     double c = 2 * Math.asin(Math.sqrt(a)); 
     double valueResult = Radius * c; 
     double km = valueResult/1; 
     DecimalFormat newFormat = new DecimalFormat("####"); 
     int kmInDec = Integer.valueOf(newFormat.format(km)); 
     double meter = valueResult % 1000; 
     int meterInDec = Integer.valueOf(newFormat.format(meter)); 
     Log.i("Radius Value", "" + valueResult + " KM " + kmInDec 
       + " Meter " + meterInDec); 

     return Radius * c; 
    } 
+0

我試圖計算總行駛距離,不是兩個點之間的距離 – Nilabja

+0

可以計算兩個點,然後加上 –

+0

這正是我曾經想過,但我不確定這是否是最好的方式 – Nilabja

0

可以插入只有距離的兩個座標之間,最後總結一下你在數據庫中有所有的距離。距離如下所示。

float distanceInMeters = lastLocation.distanceTo(myLocation); 

其中「lastLocation」和「myLocation」是Location對象。

如果你沒有Location對象,你可以試試這個。

Location lastLocation = new Location(""); 
lastLocation.setLatitude(latitude); 
lastLocation.setLongitude(longitude); 

Location myLocation = new Location(""); 
myLocation.setLatitude(otherlatitude); 
myLocation.setLongitude(otherlongitude); 

float distanceInMeters = lastLocation.distanceTo(myLocation); 
+0

請閱讀我的問題,最後添加每個值是我的想法,但我不確定這是否是最好的方法 – Nilabja

+0

@Nilabja是的它是你認爲最好的方式。 –

0

試試這個

private double distance(double lat1, double lon1, double lat2, double lon2, String unit) { 
    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; 
    if (unit == "K") { 
     dist = dist * 1.609344; 
    } else if (unit == "N") { 
     dist = dist * 0.8684; 
    } 

    return (dist); 
} 

/*:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/ 
/*:: This function converts decimal degrees to radians      :*/ 
/*:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/ 
private static double deg2rad(double deg) { 
    return (deg * Math.PI/180.0); 
} 
相關問題