我使用Google-Play-Services-Location来跟踪用户的位置。
当用户点击按钮时,它将开始挑战,用户需要到当前经度和纬度2km内的随机位置(由应用程序逻辑随机计算)。
对该位置进行地理围栏以确定它们是否到达。
是否有可能以这种方式设置地理围栏,我将如何尝试呢?
答案 0 :(得分:1)
<强>第一强>
1度经度= 111km
1度纬度= 111km
因此经度和纬度均为2km,等于.018度
<强>第二强>
您可以获取用户位置经度和纬度,然后添加等于.018的随机经度和纬度。
例如:将经度为.007,纬度为.011(等于.018)添加到用户位置。这将为您提供距离您的用户2公里的位置。
如果你想要最近的围栏部分距离2公里,只需将度数加倍到.036,并使你的围栏半径为2公里。
<强>最后强>
要获得地理围栏,您可以执行类似于上述4次的操作,这将为您提供方形围栏。或者一次给你一个半径。这个距离高达你希望围栏的大小
答案 1 :(得分:0)
我不确定这是不是在寻找与否。我使用此代码在给定位置的给定半径处创建随机标记。
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表示半径50km,x0和y0表示半径