有人可以帮我解决问题。
我目前的灯塔设置:
信标设备 - Estimote。 UUID - 两个信标也一样。
当前算法存在问题: 1.当我进入房间1并且如果它接近或立即时,它会命中webservice1。当发生这种情况时,room2接近将是远或未知,然后webservice2再次击中,并且还有很多波动。有时当我在room1时,room2信标接近显示为接近。我不这样做
新方法和问题
如果您可以通过示例详细解释我如何实现新方法,或者您可以告诉我是否有其他更好的方法,那将是很好的,但请用代码解释。
我最关心的是,当我在房间1或距离房间1只有5米时,它不应该是房间2的灯塔,反之亦然。
答案 0 :(得分:0)
您是否考虑过将每个灯塔放在自己的地区?因此,1号房间是一个区域,2号房间是另一个区域。
之后我会使用locationManager:didEnterRegion:
和locationManager:didExitRegion:
。在这些中,您可以根据您所在的房间开始和停止两个信标区域的范围。
请注意,Apple Docs表示:
在iOS模拟器或设备上测试区域监控代码时,请注意区域事件可能不会在跨越区域边界后立即发生。为防止虚假通知,iOS在满足某些阈值条件之前不会发送区域通知。具体来说,用户的位置必须越过区域边界,离开边界最小距离,并在报告通知之前保持最小距离至少20秒。
特定阈值距离由硬件确定 目前可用的定位技术。例如, 如果禁用Wi-Fi,则区域监控要少得多 准确。但是,出于测试目的,您可以假设 最小距离约为200米。
示例:强>
- (void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region
{
if (region.identifier == YOUR ROOM 1 IDENTIFIER)
{
//Start ranging room 1
}
else
{
//Start ranging room 2
}
}
- (void)locationManager:(CLLocationManager *)manager
didExitRegion:(CLRegion *)region
{
if (region.identifier == YOUR ROOM 1 IDENTIFIER)
{
//Stop ranging room 1
}
else
{
//Stop ranging room 2
}
}
答案 1 :(得分:0)
核心问题是在不适当的时间向服务器发送信息。这与开始测距无关。
当接近度相对接近时,您无法开始测距 - 您需要测距以确定接近度。
我建议您不要一直启动和停止测距的算法,而是建立一个过滤器来决定何时进行服务器调用。这是我建议的逻辑的起点:
如果满足以下所有条件,则调用服务器:
编辑:您可以通过将信标发射机功率设置得尽可能高来降低精度读数的波动,以最大化信噪比。