Tuesday, January 29, 2013

Calculando el centro de varias coordenadas geograficas en Java

Ocupaba sacar el centro de varias coordenadas en Java y encontre este articulo. Según los comentarios, es probable que de error en ciertos casos, pero para puntos muy cercanos no hay problema.
public static latlon GetCentrePointFromListOfCoordinates(List coordList)
{
    int total = coordList.size();

    double X = 0;
    double Y = 0;
    double Z = 0;

    for( idleperfromance i : coordList)
    {
        double lat = i.getLat() * Math.PI / 180;
        double lon = i.getLon() * Math.PI / 180;
         
        double x = Math.cos(lat) * Math.cos(lon);
        double y = Math.cos(lat) * Math.sin(lon);
        double z = Math.sin(lat);

        X += x;
        Y += y;
        Z += z;
    }

    X = X / total;
    Y = Y / total;
    Z = Z / total;

    double Lon = Math.atan2(Y, X);
    double Hyp = Math.sqrt(X * X + Y * Y);
    double Lat = Math.atan2(Z, Hyp);
    return new latlon(Lat * 180 / Math.PI, Lon * 180 / Math.PI);
}

class latlon
{
    double lat;
    double lon;

    public latlon(double lat, double lon)
    {
        this.lat = lat;
        this.lon = lon;
    }

    public double getLon() { return lon; }
    public double getLat() { return lat; }
}

No comments:

Post a Comment