我做了一些搜索,但找不到合适的答案。
我的应用程序应该与多个位置进行比较。这意味着我将无法将所有位置保存到我的应用程序中以使用locationManager确认接近度。我希望在服务器中完成接近确认
实现这一目标的最佳方式是什么?
如果应用程序每次设备移动时都要求接近确认,这是否合理?
答案 0 :(得分:8)
我会尝试不同的方法,因为GPS的位置更新每秒进行一次,
如果你有大量的设备,我不认为每秒向服务器询问接近度是一个好主意。
想想这个想法 -
r
。保存设备的初始位置,并计算距离
当前和initail位置之间。当它足够接近"到r
- 更新服务器。答案 1 :(得分:5)
在您的情况下,您可以简单地将收到的位置发送到服务器,然后在服务器上进行必要的计算。但不要忘记你将会处理这些问题
检测设备的责任还包括服务器
上的区域我认为您可以使用 geofencing api ,link
来降低所有内容的复杂性修改强>
否则,只要每个设备的位置发生变化,您就会在服务器上进行输入/退出计算,以获得无限数量的设备。
在我以前的公司做类似事情之前,计算进入/退出时间并输入持续时间。但是通过公共汽车上的真正gps设备
我们在城市有近100分(地理围栏)。所以你可以认为那些点在几条路线上
总线上的每个gps设备都会定期向服务器发送位置。
当公交车完成它的路线后,服务器检查设备所有收到的路线的位置。
将每个地理位置与公交车的每个位置进行比较。
这是真实的情景。您可以将其称为"基于服务器的地理围栏"。
答案 2 :(得分:5)
您可以在服务器端执行简单的k-d树实现来存储坐标。
发送设备的坐标,可以在您需要的任何时间间隔确定。如果每5秒钟或10秒钟它并不重要。这主要取决于每个坐标/半径之间的最小距离。如果他们离得更近,您可能需要更频繁地更新它。
使用找到最近邻居的k-d树将是O(log(n))。但是,只要它们在设备坐标的特定半径范围内,您就可以开始将节点添加到列表中稍作修改。实际上,如果你将它本地存储为k-d树,那么你可以选择O中最远的节点(log(n))
现在,在第二次更新时,再次发送设备位置,您可以快速更新它,因为您有现有位置。假设您在x方向上移动5.您可以将现在在半径之外的点放在x - 5处。新近距离,您执行相同的最近邻居搜索,添加节点,因为它们位于半径,但这次是从最接近您移动方向的缓存节点开始。
将其与半径的间隔树相结合。所以说0到1,1对2,2到3,作为你的间隔。你也可以在O(log(n))时间内挑选出一定半径内的所有东西。那些应该是指向k-d树中节点的指针。如果您愿意牺牲一些记忆以提高效率,那么这将简化半径计算并找到位置。
答案 3 :(得分:5)
要在服务器端实现它的“快速”方式,您可以使用mondodb $ near地理空间查询。
https://docs.mongodb.org/manual/reference/operator/query/near/
在移动端,您可以使用minDistance属性进行位置更新。根据您所在地点之间的平均距离,您可以将其设置为20米/ 50米的合理距离。