Anonymising/aggregating lat/long 坐标
Anonymising/aggregating lat/long coordinates
我想在地图上显示坐标。坐标的分辨率相对较好(小数点后三位),但我需要将它们匿名化并聚合到较粗的分辨率。
我见过的所有方法 运行 粗略坐标与原始坐标相同或非常接近的风险,因为它们依赖于舍入或向原始坐标添加随机噪声。
例如,四舍五入:
53.401, -2.899 -> 53.4, -2.9 # less than 100m
加上'noise',例如:
lat = 53.456
// 'fuzz' in range -0.1 to 0.1
rnd = (Math.random() * 2 - 1) * 0.1
newLat = lat + (Math.random() * 2 - 1) * 0.1
然而,如果 rnd
接近于 0,则坐标不会 'move' 太多。
有没有一种(简单的)方法可以 'move' 以随机方式从其原始位置一定(最小)距离的坐标?
我在这里看了其他答案,但他们似乎没有解决新坐标与原始坐标重叠的问题:
Rounding Lat and Long to Show Approximate Location in Google Maps
Is there any easy way to make GPS coordinates coarse?
要添加随机噪声,您可以在随机方向上将每个点移动一个固定的距离。在平面投影上,对于半径 r:
angle = Math.random() * 2 * PI
newLat = lat + (r * sin(angle))
newLon = lon + (r * cos(angle))
这将保证每个点在不可预测的方向上都有固定的位移 (r)。
或者,您可以通过以较粗粒度连接到多边形来匿名化,然后通过 多边形 而不是点来绘制数据。它可以像平面投影上的网格一样简单。或者更复杂的东西,例如提供多种选择的 Australian Statistical Geography Standard,最精细的是“网格块”,他们保证始终包含 30-60 个住宅。
All the approaches I've seen run the risk of the coarse coordinates
being the same as, or very close to, the original coordinates, since
they rely on rounding or adding random noise to the original.
您能解释一下,您在这里担心的风险是什么?是的,粗坐标可能碰巧是相同的,但它仍然是匿名的——无论谁看到粗数据,都不知道它是否恰好接近。他们只知道实际位置与粗略位置相距 R_max 一定距离。
关于另一个解决方案,
displace every point by a fixed distance in a random direction
我会说它更糟:这里只知道一个原始位置就很容易发现固定的位移距离。然后,对于任何“粗略”位置,我们会知道原件位于以“粗略”位置为中心的 unfilled 薄圆上 - 比 filled[=27 差得多=]原解中的圆形或矩形
至少,我会使用随机半径,也许不允许它为零,如果你担心巧合碰撞(但你不应该)。例如。这改变了半径从 r_max / 2
到 r_max
:
r = (Math.random() + 1) * r_max / 2;
然后您可以将这个随机半径与 Schepo 的解决方案一起使用。
我想在地图上显示坐标。坐标的分辨率相对较好(小数点后三位),但我需要将它们匿名化并聚合到较粗的分辨率。
我见过的所有方法 运行 粗略坐标与原始坐标相同或非常接近的风险,因为它们依赖于舍入或向原始坐标添加随机噪声。
例如,四舍五入:
53.401, -2.899 -> 53.4, -2.9 # less than 100m
加上'noise',例如:
lat = 53.456
// 'fuzz' in range -0.1 to 0.1
rnd = (Math.random() * 2 - 1) * 0.1
newLat = lat + (Math.random() * 2 - 1) * 0.1
然而,如果 rnd
接近于 0,则坐标不会 'move' 太多。
有没有一种(简单的)方法可以 'move' 以随机方式从其原始位置一定(最小)距离的坐标?
我在这里看了其他答案,但他们似乎没有解决新坐标与原始坐标重叠的问题:
Rounding Lat and Long to Show Approximate Location in Google Maps
Is there any easy way to make GPS coordinates coarse?
要添加随机噪声,您可以在随机方向上将每个点移动一个固定的距离。在平面投影上,对于半径 r:
angle = Math.random() * 2 * PI
newLat = lat + (r * sin(angle))
newLon = lon + (r * cos(angle))
这将保证每个点在不可预测的方向上都有固定的位移 (r)。
或者,您可以通过以较粗粒度连接到多边形来匿名化,然后通过 多边形 而不是点来绘制数据。它可以像平面投影上的网格一样简单。或者更复杂的东西,例如提供多种选择的 Australian Statistical Geography Standard,最精细的是“网格块”,他们保证始终包含 30-60 个住宅。
All the approaches I've seen run the risk of the coarse coordinates being the same as, or very close to, the original coordinates, since they rely on rounding or adding random noise to the original.
您能解释一下,您在这里担心的风险是什么?是的,粗坐标可能碰巧是相同的,但它仍然是匿名的——无论谁看到粗数据,都不知道它是否恰好接近。他们只知道实际位置与粗略位置相距 R_max 一定距离。
关于另一个解决方案,
displace every point by a fixed distance in a random direction
我会说它更糟:这里只知道一个原始位置就很容易发现固定的位移距离。然后,对于任何“粗略”位置,我们会知道原件位于以“粗略”位置为中心的 unfilled 薄圆上 - 比 filled[=27 差得多=]原解中的圆形或矩形
至少,我会使用随机半径,也许不允许它为零,如果你担心巧合碰撞(但你不应该)。例如。这改变了半径从 r_max / 2
到 r_max
:
r = (Math.random() + 1) * r_max / 2;
然后您可以将这个随机半径与 Schepo 的解决方案一起使用。