根据用户当前位置设置 2 公里外的随机地理围栏位置
Posted
技术标签:
【中文标题】根据用户当前位置设置 2 公里外的随机地理围栏位置【英文标题】:Set a random Geofence location 2km away based off a users current location 【发布时间】:2017-07-25 23:32:03 【问题描述】:我正在使用 Google-Play-Services-Location 来跟踪用户的位置。
当用户点击一个按钮时,它将开始一个挑战,用户需要去他们当前经纬度 2 公里范围内的一个随机位置(由应用程序逻辑随机计算)。
对该位置进行地理围栏以确定他们是否到达。
是否可以以这种方式设置地理围栏,我将如何尝试?
【问题讨论】:
【参考方案1】:我不确定这是否正是要寻找的东西。我使用此代码在给定位置的给定半径处创建随机标记。
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 为半径中心
【讨论】:
【参考方案2】:第一
1度经度=111公里
1 纬度 = 111 公里
所以经度和纬度的 2 公里都等于 0.018 度
第二
您可以获取用户位置的经度和纬度,然后添加等于 0.018 的随机经度和纬度。
例如:将经度 0.007 和纬度 0.011(等于 0.018)添加到用户位置。这将为您提供距离用户 2 公里的位置。
如果您希望围栏最近的部分距离为 2 公里,只需将总度数翻倍至 0.036,并使您的围栏半径为 2 公里。
最后
要获得地理围栏,您可以执行与上述 4 次类似的操作,这将为您提供一个方形围栏。或者一次给你一个半径。这个距离取决于你希望你的栅栏有多大
【讨论】:
以上是关于根据用户当前位置设置 2 公里外的随机地理围栏位置的主要内容,如果未能解决你的问题,请参考以下文章