根据用户当前位置设置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是半径
的中心