如何找到多个点的中心? 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”应该是你想要的。
- 如何使用BaseAdapter为onitemClickListener编写自定义列表视图的代码?
- “Android SSL套接字客户端中未找到证书路径的信任锚”
- 使用aSmack客户端映射Openfire自定义插件
- Gradle Android Build Project错误:无法找到元数据资源
- 新闻事件的android小部件按钮
- getContentLength不适用于android for FTP url
- 在使用HtlmCleaner的Android上,非英语字符解码不正确
- Android:无法发送httppost
- 使用Android中的SurfaceView和Thread正确暂停onPause()和onResume()线程