生成一个偏离两极的随机纬度
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;
我正在使用以下代码随机导出一个均匀分布的 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;