Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在远离极点的情况下生成随机Lat-Long_Java_Algorithm_Coordinates - Fatal编程技术网

Java 在远离极点的情况下生成随机Lat-Long

Java 在远离极点的情况下生成随机Lat-Long,java,algorithm,coordinates,Java,Algorithm,Coordinates,我使用以下代码随机得出均匀分布的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

我使用以下代码随机得出均匀分布的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生成器倾斜,从而减少南极的生成频率

您希望在我们的外部边界获得少量价值,而在您的分销中心获得更多价值

为了获得完美的值,您必须根据不同纬度的经度长度对分布进行建模

现在我认为一个很好的起点是高斯分布,它会给你更多的值,更接近分布的中心。这绝对不是完美的,可能会给你太多的中间价值,但这只是一个开始

这方面的代码更改非常简单:

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

如果你想均匀地拾取地球表面上的随机点,你需要遵循规则。否则,您的样品将“束”在您描述的极点附近

double u=r.nextDouble();
双v=r.nextDouble();
双纬度=数学toDegrees(数学acos(u*2-1))-90;
双经度=360*v-180;

事实上,Antartica的覆盖率约为10%,您可以尝试两件简单的事情来改善您的问题:1)在某些情况下结合lat和long;2)如果随机数满足特定的“不需要的”条件(例如:
result=nextLatLng();if(conditionFor(result.lation,result.longitude)){result=nextLatLng();}//使用result;
。您也可以尝试一些循环,而不是使用阈值。好主意。我需要执行(1.0-r.nextGaussian())*-180.0)+90.0,因为赤道为零,极点为+-90。