我需要它来对一些基于位置的 Web 服务进行压力测试。输入是 4 对纬度/经度,定义一个边界矩形或一组定义多边形的点。
是否有用于在地图上生成随机点的库/算法?(Python/Java)
我需要它来对一些基于位置的 Web 服务进行压力测试。输入是 4 对纬度/经度,定义一个边界矩形或一组定义多边形的点。
是否有用于在地图上生成随机点的库/算法?(Python/Java)
在java中你可以使用 Math.random()
例如,如果要生成 1 到 10 之间的随机数:
int randomNumGenerated = (int)(Math.Random()*10) + 1;
您可以将其应用于您尝试轻松解决的问题。
看看这个问题,它处理在任意 4 点凸多边形内生成点。
这篇关于球体点拾取的文章比我解释的要好得多,为什么在区间 [0,1) 上生成 2 个随机数的简单方法会导致球体表面上的点分布不佳。这可能是也可能不是OP的关注点。
然而,OP 应该关心的是,在地球表面随机生成一组 4 个点可能需要一些棘手的编程。考虑由点 (lat/long, all in degree) 定义的“多边形”的情况(+5,90),(+5,-90),(-5,-90),(-5,90)
。这个点(0,0)
是在这个多边形里面还是在它外面?重点是什么(0,180)
?生成这种模棱两可的多边形非常容易——欧几里得平面不能很好地模拟球体的表面。
我会采取完全不同的方法——随机生成 1 个点,然后生成经纬度偏移量。这将在表面上为您提供一个准矩形补丁,您可以调整偏移的生成以避免模糊多边形。如果要生成非准矩形的多边形,请生成一系列点和角度,当它们组合时,定义一个适合您需要的多边形。
为什么不将纬度生成为 -90 到 90 之间的随机数,将经度生成为 -180 到 180 之间的另一个随机数?
那么你有一个观点。然后,你可以根据需要生成尽可能多的点来制作多边形。
a
您可以在以下之间生成一个随机数b
:
rnum = a + rnd() * (b-a); // where rnd() gives a number from 0 to 1
简单:在地图的边界矩形内,为每个点生成两个随机数,一个用于纬度,一个用于经度。
双经度 = Math.random() * Math.PI * 2;
或使用
public static LatLng random(Random r) {
return new LatLng((r.nextDouble() * -180.0) + 90.0,
(r.nextDouble() * -360.0) + 180.0);
}