/ / Obtener el punto medio entre 4 LonLat Android - Android, ubicación, promedio

Obtener un punto medio entre 4 LonLat Android - android, ubicación, promedio

Tengo 4 puntos LonLat y me gustaría encontrarlos.El punto medio del 4. Para hacerlo, tomé los primeros 2 puntos que se encuentran en el punto medio, luego los segundos 2 los encontré en el punto, luego encontraré el punto medio entre los 2 primeros resultados.

Para encontrar el punto medio entre mis puntos, utilicé el código que se encuentra en esta publicación: https://stackoverflow.com/a/4656937/4489629

Por fortuna, no funciona. Obtengo un valor que está en el ecuador por alguna razón, mientras que las ubicaciones en las que estoy tratando de encontrar el punto medio están en el Reino Unido.

Aquí está mi código:

private void treatForDispaly(double averageSpeed, double averageElevation, RecordObject[] records) {
String currentDateTimeString = String.valueOf(new java.util.Date());

LatLng firstTwo = midPoint(records[0].getLatitude(), records[0].getLongitude(), records[1].getLatitude(), records[1].getLongitude());
//        LatLng seconTwo = midPoint(records[2].getLatitude(), records[2].getLongitude(), records[3].getLatitude(), records[3].getLongitude());
//        LatLng averageLatLng = midPoint(firstTwo.latitude, firstTwo.longitude, seconTwo.latitude, seconTwo.longitude);

ContentValues newValues = new ContentValues();
newValues.put(ContentProviderContract.DAILY_RECORDS_TREATED_DATETIME,currentDateTimeString);
newValues.put(ContentProviderContract.DAILY_RECORDS_TREATED_ALTITUDE, averageElevation);
newValues.put(ContentProviderContract.DAILY_RECORDS_TREATED_SPEED, averageSpeed);
newValues.put(ContentProviderContract.DAILY_RECORDS_TREATED_LATITUDE, records[0].getLatitude()); // firstTwo.latitude
newValues.put(ContentProviderContract.DAILY_RECORDS_TREATED_LONGITUDE, records[0].getLongitude()); //firstTwo.longitude

getApplicationContext().getContentResolver().insert(ContentProviderContract.DAILY_RECORDS_TREATED_URI, newValues);

RecordTreatedObject tempRecord = new RecordTreatedObject();
tempRecord.setDateTime(new Date(currentDateTimeString));
tempRecord.setElevation(averageElevation);
tempRecord.setLatitude(firstTwo.latitude);
tempRecord.setLongitude(firstTwo.longitude);
tempRecord.setSpeed(averageSpeed);
dailyRecordsTreated.add(tempRecord);
}

public static LatLng midPoint(double lat1,double lon1,double lat2,double lon2){
double dLon = Math.toRadians(lon2 - lon1);

lat1 = Math.toRadians(lat1);
lat2 = Math.toRadians(lat2);
lon1 = Math.toRadians(lon1);

double Bx = Math.cos(lat2) * Math.cos(dLon);
double By = Math.cos(lat2) * Math.sin(dLon);
double lat3 = Math.atan2(Math.sin(lat1) + Math.sin(lat2), Math.sqrt((Math.cos(lat1) + Bx) * (Math.cos(lat1) + Bx) + By * By));
double lon3 = lon1 + Math.atan2(By, Math.cos(lat1) + Bx);

//return out in degrees
LatLng midpoint = new LatLng(lat3, lon3);
return  midpoint;
}

Aquí están los valores que estoy ingresando:

D/DEBUG: first locatoin lat: 52.954037691647834 long: 52.954037691647834
D/DEBUG: second locatoin lat: 52.95385240191483 long: 52.95385240191483

y esto es lo que obtengo como resultado:

D/DEBUG: midpoint lat 0.9242206929866051 midpoint long: 0.9242206929866051

Gracias

Respuestas

1 para la respuesta № 1

Esto es solo una suposición descabellada, pero parece ser que está obteniendo resultados en radianes. Convierta el resultado de nuevo a grados y obtendrá 52.9539448 que es correcto, supongo.