标题说明了一切,出于隐私原因,我需要在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平方米内的随机位置也可以。
答案 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;