计算坐标

时间:2014-05-01 16:54:34

标签: android coordinates trigonometry

考虑到起始纬度和经度,方位和距离,我试图计算结束位置的坐标(在Android中)。所以你在 x y 面向 z 度(实际上是弧度)的方向。如果你向前移动 d 米,那么你的新位置是什么?我找到了这样做的公式,这是我的代码:

private double[] move(Location location, float bearingRadians, double meters){
        // Formula from: http://www.movable-type.co.uk/scripts/latlong.html
        double lat1 = location.getLatitude();
        double lon1 = location.getLongitude();
    double distanceRadians = meters / EARTH_RADIUS_METERS;

    double newLat = Math.asin(Math.sin(lat1) * Math.cos(distanceRadians) + Math.cos(lat1) * Math.sin(distanceRadians) * Math.cos(bearingRadians));
    double newLon = lon1 + Math.atan2( Math.sin(bearingRadians) * Math.sin(distanceRadians) * Math.cos(lat1), Math.cos(distanceRadians) - Math.sin(lat1) * Math.sin(newLat));

    Log.d(TAG,"Bearing: " + bearingRadians + ", distance: " + meters);
    Log.d(TAG,"Latitude changed from " + lat1 + " to " + newLat);
    Log.d(TAG,"Longitude changed from " + lon1 + " to " + newLon);

    return new double[]{newLat,newLon};
}

这是输出:

Bearing: -2.9843714, distance: 7.0
Latitude changed from 43.8 to -0.18229823611594947
Longitude changed from -103.05 to -103.05000017504125

(注意:如果您感到好奇,请注意我的实际位置!)请注意,经度变化非常小,正如我所料,因为我只移动了7米。但是纬度到底发生了什么?我曾尝试将输入和输出转换为弧度和度数,以防出现问题,但事实并非如此。这些转换都不会使纬度数接近应该的范围。

评论的网站上我得到了公式,但是还有很多其他的地方都有它,我已经检查过它们的纬度公式,直到我的眼睛受伤,我可以'看到任何问题。有谁看到了这个问题?

1 个答案:

答案 0 :(得分:0)

我没有分析隐藏公式问题的确切位置。

但如果你只是在寻找一个有效的例子,你可以在this SO question的接受答案中找到Android代码。