Java 从地理点的距离获取位置

Java 从地理点的距离获取位置,java,android,location,distance,Java,Android,Location,Distance,我正在开发一个Android应用程序,我有一个地理点的纬度和经度,我想从X米(北边)和Y米(西边)得到这个地方的坐标。GeoPoint没有实现这种功能,所以我必须自己找到一种方法来实现它 我做了一些搜索,但没有发现任何有趣的东西,你知道如何继续吗?很棘手,因为两个整经度之间的距离取决于纬度,而距离也取决于海拔 为了简单起见,我会尝试猜测经度和纬度,并检查猜测与原点之间的距离。这更容易,因为两点之间已经完成了 从一个轴开始,进行一种二进制搜索,直到找到向北X米的位置。然后对另一个轴也这样做。很棘手

我正在开发一个Android应用程序,我有一个地理点的纬度和经度,我想从X米(北边)和Y米(西边)得到这个地方的坐标。GeoPoint没有实现这种功能,所以我必须自己找到一种方法来实现它


我做了一些搜索,但没有发现任何有趣的东西,你知道如何继续吗?

很棘手,因为两个整经度之间的距离取决于纬度,而距离也取决于海拔

为了简单起见,我会尝试猜测经度和纬度,并检查猜测与原点之间的距离。这更容易,因为两点之间已经完成了


从一个轴开始,进行一种二进制搜索,直到找到向北X米的位置。然后对另一个轴也这样做。

很棘手,因为两个整经度之间的距离取决于纬度,而距离也取决于海拔

为了简单起见,我会尝试猜测经度和纬度,并检查猜测与原点之间的距离。这更容易,因为两点之间已经完成了


从一个轴开始,进行一种二进制搜索,直到找到向北X米的位置。然后对另一个轴执行相同的操作。

使用以下方法,您将获得要添加到原始位置的纬度和经度,以获得最终位置。请记住,这只适用于相对较小的距离,因为它忽略了地球曲率

private static final float GAP_LAT_LON = 0.00005f; //aprox 5 meters
private float results[] = new float[1];

private PointF getGaps(Location initial, float distanceX, float distanceY, PointF gaps){
    Location.distanceBetween(initial.getLatitude(), initial.getLongitude(), initial.getLatitude(), initial.getLongitude() + GAP_LAT_LON, results);
    double factorX = GAP_LAT_LON / results[0];
    Location.distanceBetween(initial.getLatitude(), initial.getLongitude(), initial.getLatitude() + GAP_LAT_LON, initial.getLongitude(), results);
    double factorY = GAP_LAT_LON / results[0];
    if(gaps == null)
        gaps = new PointF();
    gaps.set((float)(distanceX * factorX), (float)(distanceY * factorY));
    return gaps;
}

//to use
private void teste(){
    PointF gaps = null;
    Location initial = new Location("");

    initial.setLatitude(23.5);
    initial.setLongitude(13.2);

    //100 meters West/East and 300 meters North/South
    getGaps(initial, 100, 300, gaps);

    //gaps.x returns x offset to add/subtract to initial latitude
    //gaps.y returns y offset to add/subtract to initial longitude
}

祝您好运

使用以下方法,您将获得要添加到原始位置的纬度和经度,以到达最终位置。请记住,这只适用于相对较小的距离,因为它忽略了地球曲率

private static final float GAP_LAT_LON = 0.00005f; //aprox 5 meters
private float results[] = new float[1];

private PointF getGaps(Location initial, float distanceX, float distanceY, PointF gaps){
    Location.distanceBetween(initial.getLatitude(), initial.getLongitude(), initial.getLatitude(), initial.getLongitude() + GAP_LAT_LON, results);
    double factorX = GAP_LAT_LON / results[0];
    Location.distanceBetween(initial.getLatitude(), initial.getLongitude(), initial.getLatitude() + GAP_LAT_LON, initial.getLongitude(), results);
    double factorY = GAP_LAT_LON / results[0];
    if(gaps == null)
        gaps = new PointF();
    gaps.set((float)(distanceX * factorX), (float)(distanceY * factorY));
    return gaps;
}

//to use
private void teste(){
    PointF gaps = null;
    Location initial = new Location("");

    initial.setLatitude(23.5);
    initial.setLongitude(13.2);

    //100 meters West/East and 300 meters North/South
    getGaps(initial, 100, 300, gaps);

    //gaps.x returns x offset to add/subtract to initial latitude
    //gaps.y returns y offset to add/subtract to initial longitude
}

祝你好运

你可以调整它,选择一个更接近你正在使用的距离值的值作为间隔。如果将间距返回为double,也可以提高精度,但必须将自己的类定义为PointD(double)不存在。您可以调整它,选择一个更接近您使用的距离值的GAP_LAT_LON值。如果将间隙返回为double,还可以提高精度,但必须将自己的类定义为PointD(double)不存在。