根据用户当前位置设置2公里外的随机地理栅栏位置

问题描述:

我正在使用Google-Play-Services-Location来跟踪用户的位置。根据用户当前位置设置2公里外的随机地理栅栏位置

当用户点击一个按钮时,它将开始一个挑战,用户需要去当前经度和纬度2公里范围内的随机位置(由应用程序逻辑随机计算)。

Geofencing该位置以确定他们是否到达。

是否有可能以这种方式设置地理围栏,我将如何去尝试呢?

经度首先

1度=111公里

1度纬度=111公里

所以2公里为经度和纬度上都等于0.018度

你可以得到用户定位经度和纬度,然后添加一个随机的经度和纬度等于0.018。

例如:将经度.007和纬度0.011(相当于0.018)添加到用户位置。这会给你一个离你的用户2公里的位置。

如果您希望围栏的最近部分距离为2km,则只需将度数加倍为.036,并使栅栏半径为2km。

最后

为了得到一个地理围栏,你可以做一些类似的4倍以上,会给你一个方形围栏的东西。或者一次给你一个半径。这个距离取决于你想要你的围栏有多大

我不确定这是不是真的在找什么。我用这个代码在给定位置的给定半径处创建随机标记。

private void getLocation() { 


    double x0 = 38.423734; 
    double y0 = 27.142826000000014; 
    int radius = 50000; 

    for (int i = 0; i < 50; i++) { 
     Random random = new Random(); 

     // Convert radius from meters to degrees 
     double radiusInDegrees = radius/111000f; 

     double u = random.nextDouble(); 
     double v = random.nextDouble(); 
     double w = radiusInDegrees * Math.sqrt(u); 
     double t = 2 * Math.PI * v; 
     double x = w * Math.cos(t); 
     double y = w * Math.sin(t); 

     // Adjust the x-coordinate for the shrinking of the east-west distances 
     double new_x = x/Math.cos(Math.toRadians(y0)); 

     double foundLongitude = new_x + x0; 
     double foundLatitude = y + y0; 
     LatLng position = new LatLng(foundLongitude, foundLatitude); 


     MarkerOptions mo = new MarkerOptions() 
       .position(position) 
       .title(i + "").alpha(0.87f) 
       .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_GREEN)); 

     Marker marker = mMap.addMarker(mo); 


    } 




} 

50000装置50公里半径和x0和y0是半径

的中心