我正在开发一个应用程序。我需要地理围栏来检查特定的 纬度和经度位于特定半径内。我正在学习地理围栏教程,但我的问题是 我不知道在哪里传递我想要检查的纬度和经度
教程链接:
https://code.tutsplus.com/tutorials/how-to-work-with-geofences-on-android--cms-26639
这里
.setCircularRegion( LATITUDE, LONGITUDE, RADIUS)
当
IntentService
检测到指定区域上的转换(进入、退出或停留)时,onHandleIntent()
将被调用,您可以执行操作(警报或任何操作)
@tkrz 的公式是正确的。
(lat-center_lat)^2 + (lon - center_lon)^2 < radius^2
左侧是我的位置到地理围栏中心点之间距离的平方。右侧部分是地理围栏圆半径的平方。
如果距离小于圆的半径,则意味着我站在地理围栏区域内,反之亦然。
我发现
Location.distanceBetween()
在这里比任何东西都更有帮助。只需检查给定位置与地理围栏中心之间的距离是否大于地理围栏的半径:
private fun isLocationWithinGeofence(location: Location, geofence: Geofence): Boolean {
val distance = FloatArray(1)
Location.distanceBetween(geofence.latitude, geofence.longitude, location.latitude, location.longitude, distance)
return distance[0] < geofence.radius
}
如果您只想检查这个(不使用通知机制),您将需要一些数学知识:
(lat-center_lat)^2 + (lon - center_lon)^2 < radius^2