使用Javascript在100米半径范围内争夺纬度经度坐标

时间:2016-02-26 11:58:28

标签: javascript google-maps math latitude-longitude

标题说明了一切,出于隐私原因,我需要在100米范围内对lat / lon坐标进行加扰。我对数学很恐怖,无法弄清楚如何将100米转换为纬度/经度......

例如,我的位置如下:

lat: 52.5037086
lng: 13.434223100000054

需要在100m范围内随机加扰,即生成的坐标距离原始坐标最远的任何方向都是100m。

我见过这个公式:

d = acos( sin(φ1)⋅sin(φ2) + cos(φ1)⋅cos(φ2)⋅cos(Δλ) ) ⋅ R

where:  
    φ = latitude, λ = longitude
    R = radius of earth
    d = distance between the points

不知道如何在JavaScript中完成此操作。这些“点”是谷歌地图中的标记,如果它有所作为。

说实话,它甚至不需要是一个圆圈,只要在100米x 100平方米内的随机位置也可以。

1 个答案:

答案 0 :(得分:0)

在如此小的范围内,我们可以使用线性近似问题和球形地球模型。

考虑一下,你处于(lat, long)的位置。然后,将lat增加1°会导致距原点d_lat = Pi * R * 1°/180°(圆的简单周长)的距离。

同样,将long增加1°会导致距离d_long = cos(lat) * Pi * R * 1°/180°

然后,您可以计算纬度和经度的最大变化:

maxChangeLatitude  = 100 m / d_lat
maxChangeLongitude = 100 m / d_long

在这个方块中找到一个随机点,你有自己的观点:

newLat  = lat  + (2 * Math.random() - 1) * maxChangeLatitude;
newLong = long + (2 * Math.random() - 1) * maxChangeLongitude;