计算一个"框"在Java中的纬度和经度坐标

时间:2013-10-10 17:15:05

标签: java android distance latitude-longitude

我正在尝试获得两个点A和B,每个点在5km距离范围内并且在中心点C周围垂直。 因此,点A和B创建一个边长为10km的“盒子”,C位于该盒子的正中心。 这是我的代码:

//Distance is 5 kilometers
float distance = 5;    

float latCenter = locationInfo.lastLat;
float lngCenter = locationInfo.lastLong;

// Calculate corner point distance in lat and long
float latDelta = distance/110.54f;
float longDelta = distance/(111.320f(float)Math.cos((double)latCenter));

// Calculate coordinates of the corner points
float latA = lat - latDelta;
float longA = lng - longDelta;
float latB = lat + latDelta;
float longB = lng + longDelta;

我知道这些是近似值,但在我的情况下,近似误差约为1km。 垂直距离很好(10.06km),但水平距离只有6km而不是10km。

我的配方有什么问题?我猜它有一些非常简单的数学错误,但我找不到它。我需要一个非常简单快速的代码,所以我的计算基于StackOverflow的答案:Simple calculations for working with lat/lon + km distance?

1 个答案:

答案 0 :(得分:3)

我打赌 degres vs radians (来自javadoc of cos):

  

public static double cos(double a)

     

返回角度的三角余弦值。特别案例:   如果参数是NaN或无穷大,则结果为NaN。   结果必须在正确舍入结果的1 ulp内。结果必须是半单调的。

     

参数:   a - 角度,以弧度表示。

     

返回:   论证的余弦。