【问题标题】:Generate random lat lon生成随机纬度
【发布时间】:2012-08-22 17:50:30
【问题描述】:

我需要它来对一些基于位置的 Web 服务进行压力测试。输入是定义边界矩形的 4 对纬度/经度或定义多边形的一组点。

是否有任何用于在地图上生成随机点的库/算法? (Python/java)

【问题讨论】:

  • 所以多边形可能不是正方形/矩形?
  • 是的。为了简单起见,我将从凸开始。

标签: java python algorithm google-maps


【解决方案1】:

sphere point picking 上的这篇文章比我能解释的要好得多,为什么在区间 [0,1) 上生成 2 个随机数的简单方法会导致球体表面上的点分布不佳。这可能是也可能不是 OP 关心的问题。

但是,OP 应该担心在地球表面随机生成一组 4 个点可能需要一些棘手的编程。考虑由点(纬度/经度,全部以度为单位)(+5,90),(+5,-90),(-5,-90),(-5,90) 定义的“多边形”的情况。 (0,0) 点是在这个多边形里面还是在它外面? (0,180) 点呢?生成这种模棱两可的多边形非常容易——欧几里得平面不能很好地模拟球体的表面。

我会采取完全不同的方法——随机生成 1 个点,然后生成经纬度偏移。这将在表面上为您提供一个准矩形补丁,您可以调整偏移的生成以避免模糊多边形。如果您想生成非准矩形的多边形,请生成一系列点和角度,当它们组合时,定义一个适合您需要的多边形。

【讨论】:

    【解决方案2】:

    看看这个问题,它处理在任意 4 点凸多边形内生成点。

    Random points inside a 4-sided Polygon

    【讨论】:

      【解决方案3】:

      为什么不将纬度生成为 -90 到 90 之间的随机数,将经度生成为 -180 到 180 之间的另一个随机数?

      那你说得有道理。然后,你可以根据需要生成尽可能多的点来制作多边形。

      您可以在ab 之间生成一个随机数,例如:

      rnum = a + rnd() * (b-a); // where rnd() gives a number from 0 to 1
      

      【讨论】:

        【解决方案4】:

        双经度 = 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);
                }
        

        【讨论】:

          【解决方案5】:

          简单:在地图的边界矩形内,为每个点生成两个随机数,一个用于纬度,一个用于经度。

          【讨论】:

            【解决方案6】:

            在 java 中你可以使用 Math.random()

            例如,如果要生成一个介于 1 和 10 之间的随机数:

            int randomNumGenerated = (int)(Math.Random()*10) + 1;
            

            您可以将其应用于您想要轻松解决的问题。

            【讨论】:

            • 在处理不一定代表矩形的 4 个点时,如何有效地应用这一点尚不清楚。
            • 您只需要随机生成 Long 和 Lat 两个点,例如(a,b) 和 (a,y) 其中 x 坐标相同。然后随机生成矩形宽度,即 br。第三个矩形点是(a,b+br)。第 4 个矩形点是 (a, y+br)
            • 看问题 - 随机点应该是一般多边形的一部分,不一定是矩形。
            猜你喜欢
            • 1970-01-01
            • 2012-07-09
            • 2015-12-20
            • 2019-11-01
            • 1970-01-01
            • 1970-01-01
            • 2017-02-27
            • 1970-01-01
            • 2012-05-16
            相关资源
            最近更新 更多