根据用户当前位置设置 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 公里外的随机地理围栏位置的主要内容,如果未能解决你的问题,请参考以下文章

从地理围栏示例项目中获取当前位置

Android:如何在用户关闭位置设置时获取地理围栏事件?

Swift:用户位置附近的地理围栏/地理位置

基于百度地图的电子围栏的实现之地理位置检索

如何使地理围栏准确?

安卓地理围栏