/ / Mitte Punkt zwischen 4 LonLat Android - Android, Ort, Durchschnitt

Holen Sie sich den Mittelpunkt zwischen 4 LonLat Android - Android, Standort, Durchschnitt

Ich habe 4 LonLat Punkte und möchte sie findender Mittelpunkt des 4. Um dies zu tun, habe ich die ersten 2 den Mittelpunkt gefunden, dann die zweite 2 den Punkt gefunden, dann den Mittelpunkt zwischen den 2 ersten Ergebnissen gefunden.

Um den Mittelpunkt zwischen meinen Punkten zu finden, habe ich den Code verwendet, der in diesem Beitrag gefunden wurde: https://stackoverflow.com/a/4656937/4489629

Unvorstellbar, dass es nicht funktioniert, ich bekomme einen Wert, der aus irgendeinem Grund am Äquator ist, während die Orte, an denen ich den Mittelpunkt finde, in Großbritannien sind.

Hier ist mein 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;
}

Hier sind die Werte, die ich eingib:

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

und hier ist, was ich als Ergebnis bekomme:

D/DEBUG: midpoint lat 0.9242206929866051 midpoint long: 0.9242206929866051

Vielen Dank

Antworten:

1 für die Antwort № 1

Dies ist nur eine wilde Vermutung, aber es scheint, dass Sie Ergebnisse im Bogenmaß erhalten. Konvertiere das Ergebnis zurück in Grad und du erhältst 52,9539448, was korrekt ist, nehme ich an.