如何找到多个点的中心? Android的

我在MapView上放置了多个点,并希望将地图置于这些点上,即不是任何特定的点,只是它们的平均中心。

我知道在Javascript G. Maps API中有一种方法。 我想知道是否有一种先前的方法在Android中执行此操作?

这个问题看起来很像我前一段时间的问题……

Android MapView设置自动缩放,直到所有ItemizedOverlay都可见

您要计算的内容称为Centroid 。 有几种Java实现用于计算有限点集(多边形)的质心。

例如: JavaGeom具有用于查找多个2D点的质心的实现。
我不确定它是否有标准的android实现,但是实现起来相当简单。

简单实施:

public static float[] centroid(float[] points) { float[] centroid = { 0, 0 }; for (int i = 0; i < points.length; i+=2) { centroid[0] += points[i]; centroid[1] += points[i+1]; } int totalPoints = points.length/2; centroid[0] = centroid[0] / totalPoints; centroid[1] = centroid[1] / totalPoints; return centroid; } 

您可以分别取x和y点的平均值,然后根据这些值设置跨度,并引入比值大25%的填充,以确保有足够的空间来聚焦它。

有关详情,请查看此信息: http : //code.google.com/android/add-ons/google-apis/reference/index.html

如果你需要在布局中显示一个图形(一个shapre,一个区域),我不会使用质心(或重心或密度均匀的质心)。 我真正需要将图形置于布局中心,是显示每个点的所有坐标的最大值和最小值。

 ArrayList track; public GeoPoint CenterMap() { double longitude = 0; double latitude = 0; double maxlat = 0, minlat = 0, maxlon = 0, minlon = 0; int i = 0; for (GeoPoint p : track) { latitude = p.getLatitude(); longitude = p.getLongitude(); if (i == 0) { maxlat = latitude; minlat = latitude; maxlon = longitude; minlon = longitude; } else { if (maxlat < latitude) maxlat = latitude; if (minlat > latitude) minlat = latitude; if (maxlon < longitude) maxlon = longitude; if (minlon > longitude) minlon = longitude; } i++; } latitude = (maxlat + minlat) / 2; longitude = (maxlon + minlon) / 2; return new GeoPoint(latitude, longitude); } 

不要取点x和y的平均值.Google“centroid psuedocode”应该是你想要的。