生成一个偏离两极的随机纬度

Generating a random Lat Long with bias away from poles

我正在使用以下代码随机导出一个均匀分布的 Lat/Lng

public static LatLng nextLatLng(){
    return new LatLng((r.nextDouble() * -180.0)+ 90.0,
                      (r.nextDouble() * -360.0)+ 180.0);  

我使用派生的 Lat/Lng 检索 google 街景

streetView.setPosition (nextLatLng(), ONE_THOUSAND_KM_RADIUS);

我注意到我的结果中有很大一部分 (~10%) 将我带到了南极洲。我认为这是因为经度越靠近两极越短,并且南极洲的 streetView 位置越少。

什么是倾斜随机 LatLng 生成器以减少生成南极点的好算法?

您希望我们的外边界的值很少,而分布中心的值更多。

要获得完美的值,您必须对基于不同纬度的不同经度长度的分布进行建模。

现在我认为高斯分布是一个很好的起点,它将为您提供更多靠近分布中心的值。它绝不是完美的,并且可能会在中心给你太多的值,但它是一个开始。

代码更改非常简单:

public static LatLng nextLatLng(){
    return new LatLng((r.nextGaussian() * -180.0)+ 90.0,
                      (r.nextDouble() * -360.0)+ 180.0);  
}

For more information about the nextGaussian() function see the java documentation.

如果要在地球表面均匀选取随机点,需要遵循Sphere Point Picking的规则。否则,您的样本将 "bunched" 如您所描述的那样靠近两极。

double u = r.nextDouble();
double v = r.nextDouble();

double latitude = Math.toDegrees(Math.acos(u*2-1)) - 90;
double longitude = 360 * v - 180;