Ich versuche, das Zentrum einer Form in Android zu bekommen. Die Form wird auf der Karte von Hand gezeichnet. Ich habe alle Koordinaten, aber die Mittelwerte erweisen sich als kniffliger als ich dachte. Ich möchte einen Marker auf die mittlere Breite und Länge zeichnen.Zentrum eines Clusters von Längen- und Breitenpunkten in Google Map Android
Ich habe versucht, den Breiten- und Längengrad separat zu summieren und dann durch die Anzahl der Punkte zu dividieren. Dies gibt nicht die richtige Antwort. Der Marker scheint immer hinter der Figur zu liegen. Ich habe auch versucht, die Umsetzung verwenden, aber es gibt die gleiche Antwort, eine frühere Frage SO, Calculate the center point of multiple latitude/longitude coordinate pairs
Der Code Ich habe mit:
private void calculateFreeHandPolygonParameters(){
double xValues = 0;
double yValues = 0;
double zValues = 0;
int count = 0;
// linesForPolygon a list of the lines in the polygon
for(Polyline line : linesForPolygon){
for (LatLng point : line.getPoints()) {
xValues += Math.cos(Math.toRadians(point.latitude)) * Math.cos(Math.toRadians(point.longitude));
yValues += Math.cos(Math.toRadians(point.latitude)) * Math.sin(Math.toRadians(point.longitude));
zValues += Math.sin(Math.toRadians(point.latitude));
count++;
}
}
double meanX = xValues/count;
double meanY = yValues/count;
double meanZ = zValues/count;
double centralLongitude = Math.atan2(meanY, meanX);
double centralSquareRoot = Math.sqrt(Math.pow(meanX, 2) + Math.pow(meanX, 2) + Math.pow(meanX, 2));
double centralLatitude = Math.atan2(meanZ, centralSquareRoot);
double latitude = Math.toDegrees(centralLatitude);
double longitude = Math.toDegrees(centralLongitude);
Log.i("MAPS", "Freehand Parameters: x mean -> " + latitude + " y mean -> " + longitude);
testMarker = mMap.addMarker(new MarkerOptions()
.position(new LatLng(latitude, longitude))
.title("Polygon center")
.snippet("lat: " + latitude + " long: " + longitude));
}
Die von Ihnen beschriebene Methode sollte funktionieren, außer vielleicht in Fällen, in denen der Längengrad in der Nähe der internationalen Datumsgrenze liegt oder wenn die Orte in der Nähe der Pole liegen. Vielleicht solltest du deinen Code teilen. – JerryM