哪个是检查用户位置(android 应用程序)是不是在多边形内的更好方法
Posted
技术标签:
【中文标题】哪个是检查用户位置(android 应用程序)是不是在多边形内的更好方法【英文标题】:Which is a better method to check if user's location(android app) is inside a polygon哪个是检查用户位置(android 应用程序)是否在多边形内的更好方法 【发布时间】:2020-10-16 05:28:20 【问题描述】:我正在构建一个 android 应用程序(地理围栏),其中我需要检查用户的位置是否在给定的多边形内。该应用程序可以容忍一些检测延迟,但必须具有电池效率。 我目前正在做的事情如下 - 设置当用户的位置改变 50 米(变量)时触发的回调。在回调中,使用point-in-polygon算法检查当前位置是否在多边形内,并相应地更新共享偏好。
现在,我尝试使用 Google 的地理围栏 API 对其进行优化,但它仅适用于圆形地理围栏。这就是我的想法-
-
计算可以覆盖整个多边形的最小圆
使用 Google 的 Geofence API 设置回调,当用户进入和退出圈子时触发该回调
当用户进入圈子时,像当前实现一样设置回调(即每 50 米获取一次更新并存储校内/校外共享偏好)
当用户退出圈子时,移除回调。
因此,在这种情况下,我会避免在用户根本不在圈子中时进行更新。但是,问题是,Google 的 Geofence API 与融合位置提供程序相比要好多少?
【问题讨论】:
【参考方案1】:虽然我不了解 Geofence API,但我非常相信它基于融合位置提供程序 (FLP)。
当设置地理围栏并且设备注册运动时,FLP 会请求位置并根据地理围栏进行检查。
可以在 Android 错误报告 (https://developer.android.com/topic/performance/power/setup-battery-historian) 中找到这种机制的一些证据。例如,我在使用地理围栏(Galaxy S9、Android 10)时发现了以下行:
Request[PRIORITY_BALANCED_POWER_ACCURACY requested=1800000ms fastest=5000ms] tag=geofencing moduleId=com.google.android.gms.location.geofencing hideAppOps=true clients=[my_app] forceCoarseLocation=false exemptFromBackgroundThrottle
基本上,这意味着我的应用程序设置的地理围栏每 30 分钟以平衡的精度(即 wifi 精度)请求位置。这是地理围栏触发器的最长可能延迟。并且其他来源触发的位置是被动定位的,最小间隔为 5s。
如果位置请求未根据运动进行计时,则将您自己的位置请求与多边形点检查结合使用可能会消耗更多电量。
【讨论】:
以上是关于哪个是检查用户位置(android 应用程序)是不是在多边形内的更好方法的主要内容,如果未能解决你的问题,请参考以下文章
我如何检查用户是不是真的在他的手机上启用了 android 中的 gps 位置
Android Google Map如何检查用户是不是在标记矩形区域