我正在开发一个用户可以设置多个位置的应用程序。当用户使用GeoFencing进入或离开特定区域时,我成功显示通知。
现在,我需要为所有保存的位置提供监控,它可以是数百个甚至更多。我在给定的链接中阅读了“您可以拥有多个活动的地理围栏,每个设备用户限制为 100 个。”
有没有办法为每个设备用户添加超过 100 个地理围栏?
谢谢!
我正在开发一个用户可以设置多个位置的应用程序。当用户使用GeoFencing进入或离开特定区域时,我成功显示通知。
现在,我需要为所有保存的位置提供监控,它可以是数百个甚至更多。我在给定的链接中阅读了“您可以拥有多个活动的地理围栏,每个设备用户限制为 100 个。”
有没有办法为每个设备用户添加超过 100 个地理围栏?
谢谢!
当您获得位置更新时,如果您的所有地理围栏的 ArrayList 超过 100,则删除所有监控的地理围栏,然后使用 harvesine 公式计算最近的 100 个地理围栏:
public static final double R = 6372.8; // In kilometers
public static double haversine(double lat1, double lon1, double lat2, double lon2) {
double dLat = Math.toRadians(lat2 - lat1);
double dLon = Math.toRadians(lon2 - lon1);
lat1 = Math.toRadians(lat1);
lat2 = Math.toRadians(lat2);
double a = Math.sin(dLat / 2) * Math.sin(dLat / 2) + Math.sin(dLon / 2) * Math.sin(dLon / 2) * Math.cos(lat1) * Math.cos(lat2);
double c = 2 * Math.asin(Math.sqrt(a));
return R * c;
}
这将为您提供两个位置之间的距离。之后,您可以将该距离与地理围栏区域半径进行比较,以了解是否在该区域内。
注意:如果您的半径是米,那么这个距离将以公里为单位,然后只需将 hasrsine 方法的结果乘以 1000,以便将其转换为米。
这将允许您始终根据您的位置监控 100 个最近的地理围栏。能够监控超过 100 个,因为它将始终将监控地理围栏区域更改为最近的 100 个地理围栏区域。