Java 如何找到多个点的中心?安卓

Java 如何找到多个点的中心?安卓,java,android,android-mapview,Java,Android,Android Mapview,我在地图视图上放置了多个点,并希望将地图置于这些点的中心,即不是任何一个点,只是其中一部分的平均中心 我知道Javascript G.mapsapi中有一种方法可以实现这一点。我想知道是否有一个预先存在的方法在Android中实现这一点 您可以分别取点x和y的平均值,然后根据这些值设置跨度,并引入一个比该值大25%的填充,以确保有足够的空间关注它 有关更多信息,请查看: 您试图计算的内容称为a。 有几种Java实现可用于计算有限点集(多边形)的质心 例如:具有用于查找多个二维点的质心的方法。 我

我在地图视图上放置了多个点,并希望将地图置于这些点的中心,即不是任何一个点,只是其中一部分的平均中心


我知道Javascript G.mapsapi中有一种方法可以实现这一点。我想知道是否有一个预先存在的方法在Android中实现这一点

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

有关更多信息,请查看:

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

例如:具有用于查找多个二维点的质心的方法。
我不确定是否有一个标准的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;
}
公共静态浮点[]形心(浮点[]点){
float[]形心={0,0};
对于(int i=0;i
这个问题看起来很可疑,就像我不久前遇到的问题一样


不要取x点和y点的平均值。。
谷歌“质心伪代码”,这应该是你想要的。

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

ArrayList<GeoPoint> 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);
}
ArrayList轨道;
公共地质点中心地图(){
双经度=0;
双纬度=0;
double maxlat=0,minlat=0,maxlon=0,minlon=0;
int i=0;
对于(地质点p:轨迹){
纬度=p.getLatitude();
经度=p.getLongitude();
如果(i==0){
maxlat=纬度;
minlat=纬度;
maxlon=经度;
minlon=经度;
}否则{
if(最大纬度<纬度)
maxlat=纬度;
如果(minlat>纬度)
minlat=纬度;
if(最大经度<经度)
maxlon=经度;
如果(minlon>经度)
minlon=经度;
}
i++;
}
纬度=(最大纬度+最小纬度)/2;
经度=(最大经度+最小经度)/2;
返回新的地理点(纬度、经度);
}