0

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

我进行了一些搜索,但没有发现任何有趣的东西,您知道如何进行吗?

4

2 回答 2

2

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

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

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

于 2012-09-29T15:12:37.760 回答
1

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

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
}

祝你好运

于 2012-09-29T17:22:34.400 回答