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

时间:2012-09-29 15:03:55

标签: java android location distance

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

我做了一些搜索,但我没有找到任何有趣的内容,你知道如何继续吗?

2 个答案:

答案 0 :(得分:2)

整蛊,因为两个整体经度之间的距离取决于纬度,距离也取决于海拔......

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

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

答案 1 :(得分: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
}
祝你好运