2

지금까지 여행 한 경로에서 매 5 초마다 데이터베이스에 위도와 경도를 모두 삽입했습니다.Android에서 Google Maps API V3의 총 이동 거리를 계산합니다.

이제 도착지에 도달 한 후 위도, 경도 집합에서 거리를 계산해야합니다. 그것은 두 점 사이의 이동 거리를 계산하는 것이 아니라 내 데이터베이스에서 오랫동안 위도 집합에서 이동 한 총 거리를 얻는 것입니다.

내가 지난

에서 두 점 그들을 추가 할 사이의 거리를 얻어서 총 거리를 계산하는 방법이보다 더 나은 솔루션 거기를 생각 ? 제안 및 도와주세요

이미 this SO post하지만 내가 데이터베이스에 좌표를 삽입하는 Google지도 거리 매트릭스 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

당신은 당신은 두 개의 좌표 사이에 전용 거리를 삽입하고 마지막으로 당신이 데이터베이스에 가진 모든 거리를 요약 할 수 애큐 리트 결과 당신에게

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 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); 
} 
관련 문제