使用 Javascript 打乱半径 100m 半径内的纬度经度坐标

Scramble latitude longitude coordinates within 100m radius with Javascript

本文关键字:纬度 经度 坐标 100m Javascript 使用      更新时间:2023-09-26

标题说明了一切,出于隐私原因,我需要在 100m 半径内打乱纬度/纬度坐标。我只是数学很糟糕,不知道如何将 100m 转换为纬度/纬度......

例如,我会有一个这样的位置:

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中完成此操作。这些"点"是谷歌地图中的标记,如果它有所作为的话。

老实说,它甚至不需要是一个圆,只需在 100m x 100m 正方形内的随机位置也可以。

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

考虑一下,您处于(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;