我使用以下代码随机派生均匀分布的Lat / Lng
public static LatLng nextLatLng(){
return new LatLng((r.nextDouble() * -180.0)+ 90.0,
(r.nextDouble() * -360.0)+ 180.0);
我使用派生的Lat / Lng来使用
检索谷歌街景streetView.setPosition (nextLatLng(), ONE_THOUSAND_KM_RADIUS);
我注意到我的结果中有很高的百分比(~10%)将我带到了南极洲。我认为这是因为经度越接近两极,而且在南极洲的街景位置越来越少。
什么是偏好随机LatLng发生器的好算法,以便更少生成南极?
答案 0 :(得分:3)
如果您想在地球表面选择随机点统一,则需要遵循Sphere Point Picking的规则。另外,如您所述,您的样品将在两极附近“聚集”。
double u = r.nextDouble();
double v = r.nextDouble();
double latitude = Math.toDegrees(Math.acos(u*2-1)) - 90;
double longitude = 360 * v - 180;
答案 1 :(得分:2)
您需要在我们的外边界处使用少量值,而在分布的中心需要更多值。
对于完美的值,您必须根据不同纬度的经度的不同长度对分布进行建模。
现在我认为一个好的起点是高斯分布,它将为您提供更接近分布中心的更多值。它绝不是完美的,可能会在中心给你太多的价值,但这是一个开始。
代码更改就像它一样容易:
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.