我想定义一个地理边界,应用程序将拒绝工作。我已经知道如何使用由两个纬度/长对绑定的方形来做到这一点:
if ((dLAT.doubleValue() > 35.309171) || (dLAT.doubleValue() < 35.226442) || (dLON.doubleValue() < -92.790165) || (dLON.doubleValue() > -92.707081))
{
LocalBroadcastManager localBroadcastManager = LocalBroadcastManager.getInstance(this);
localBroadcastManager.sendBroadcast(new Intent("killapp"));
}
我也知道地理围栏......或者足以知道通过地理围栏,区域被定义为从单点开始具有半径的圆圈。
但就像我说的那样,我想定义一个与现实相匹配的边界:
例如,如果某个应用程序设计为在用户位于堪萨斯州边界之外不起作用,则定义RADIUS并不令人满意,因为堪萨斯州不是圆形的,其边界是蠕动。
我碰巧正在使用Android,但我怀疑这个问题真的很重要。
感谢您的帮助!
答案 0 :(得分:3)
这比人们想象的容易得多:
将区域定义为多边形,在经度,纬度坐标中有N个点。
在多边形方法中使用点:
测试当前点是否位于多边形外部, 上面的代码使用x,y坐标。 只需使用经度而不是x和纬度作为y 当区域穿过北极或南极时,以及当它穿过基准限制(经度的边界= -180到180)时,代码可能不起作用,但没有人在那里使用你的应用程序。
Altough不能总是使用公式desigend在x,y(笛卡尔)平面上工作,它在这里适用于球面lat,lon,坐标。
答案 1 :(得分:1)
以下是有关如何获取设备当前位置并注册新位置更新的官方文档:http://developer.android.com/training/location/receive-location-updates.html
获得当前位置后,您可以使用Location.distanceTo(Location)
或Location.distanceBetween(double, double, double, double, float[])
检查设备是否在指定范围内。
答案 2 :(得分:1)
也许使用Geocoder
根据当前位置提取城市/州名称,this答案可能会帮助您了解如何做到这一点。
因此,如果不允许使用城市/州名称,则关闭应用程序并显示消息。
但请注意Geocoder
需要访问互联网,但不确定是否适合您。
答案 3 :(得分:-1)
定义位置的半径并计算onLocationChangeListener中当前位置的距离。如果距离小于半径,则设置布尔标志。当标志为假时执行您的操作。