/ / Obtenez le point milieu entre 4 LonLat Android - Android, l'emplacement, la moyenne

Obtenez le point médian entre 4 LonLat Android - Android, emplacement, moyenne

J'ai 4 points LonLat et je voudrais trouverle milieu du 4. Pour ce faire, j'ai pris les 2 premiers trouvé le point médian, puis les 2 seconds ont trouvé le point, puis trouver le milieu entre les 2 premiers résultats.

Pour trouver le point milieu entre mes points, j'ai utilisé le code trouvé sur ce post: https://stackoverflow.com/a/4656937/4489629

Malheureusement, cela ne fonctionne pas, j'obtiens une valeur qui est sur l'équateur pour une raison quelconque, tandis que les emplacements que j'essaie de trouver le point médian sont au Royaume-Uni.

Voici mon code:

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;
}

Voici les valeurs que j'entre:

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

et voici ce que j'obtiens en conséquence:

D/DEBUG: midpoint lat 0.9242206929866051 midpoint long: 0.9242206929866051

Merci

Réponses:

1 pour la réponse № 1

C'est juste une supposition sauvage, mais il semble que vous obteniez des résultats en radians. Convertissez le résultat en degrés et vous obtenez 52,9539448, ce qui est correct, je suppose.