2

До сих пор я вставлял все наборы широты и долготы в мою базу данных через каждые 5 секунд от пройденного мной пути.Рассчитайте общую пройденную дистанцию ​​Google Maps API V3 в Android

Теперь, после достижения цели, я должен рассчитать расстояние от наборов широты, долготы. Речь идет не о расчете расстояния пробега между двумя точками, а в том, чтобы получить общее расстояние, пройденное от множества lat, долго в моей базе данных.

Я думал, способ вычисления общего расстояния, получая расстояние между двумя точками и добавить их в последний

Есть ли лучшее решение, чем это? пожалуйста, предложите и помогите

Уже читали this SO post, но не получают, как я получить общее расстояние, с помощью Google Maps 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 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); 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^