使用 Azure Spatial Anchors 时如何获取多个Anchor?
iOS Swift 端批量获取Azure Spatial Anchors实现方案
你已经完成单Anchor的增查操作,说明基础的会话配置、权限校验都已经正常,批量获取仅需要调整查询逻辑即可,具体操作如下:
操作步骤
- 第一步:整理查询条件,支持两种常用的批量查询规则
- 按指定锚点ID批量查询:提前把需要获取的多个锚点的唯一ID存入数组,适合明确知道要拉取哪些锚点的场景
- 按空间位置/自定义属性查询:设置附近范围、自定义标签过滤条件,适合拉取当前空间内所有符合要求的锚点的场景
- 第二步:创建查询对象并启动监听
基于你的ASACloudSpatialAnchorSession实例创建查询,通过ASACloudSpatialAnchorWatcher监听返回的锚点结果,所有匹配的锚点会通过回调逐个返回 - 第三步:处理返回结果,完成批量获取
回调中接收找到的锚点,存入自定义数组存储,可根据业务需求判断所有目标锚点都返回后停止监听
代码示例
// 1. 初始化已经配置好的云锚点会话,你之前单锚点用的实例即可 var cloudSession: ASACloudSpatialAnchorSession? var foundAnchors: [ASACloudSpatialAnchor] = [] var currentWatcher: ASACloudSpatialAnchorWatcher? // 场景1:按指定ID批量查询 func queryAnchorsByIds(anchorIds: [String]) { let criteria = ASAAnchorLocateCriteria()! criteria.identifiers = anchorIds // 启动监听 currentWatcher = cloudSession?.createWatcher(criteria) } // 场景2:查询当前位置附近5米内的所有锚点 func queryNearbyAnchors() { let criteria = ASAAnchorLocateCriteria()! let nearDevice = ASANearDeviceCriteria()! nearDevice.distanceInMeters = 5.0 nearDevice.maxResultCount = 20 // 最多返回20个锚点,可自定义 criteria.searchNearDevice = nearDevice currentWatcher = cloudSession?.createWatcher(criteria) } // 实现锚点定位回调,你之前单锚点应该已经实现了该代理方法 func session(_ session: ASACloudSpatialAnchorSession!, didLocate anchor: ASACloudSpatialAnchor!) { DispatchQueue.main.async { [weak self] in guard let self = self, !self.foundAnchors.contains(anchor) else { return } // 把找到的锚点加入数组 self.foundAnchors.append(anchor) // 可选:如果是按ID查询,判断所有目标锚点都找到后停止监听 // if self.foundAnchors.count == targetIdCount { // self.currentWatcher?.stop() // self.currentWatcher = nil // } } }
注意事项
- 批量查询的最大返回数量可通过
maxResultCount参数自定义,最大值为35 - 不需要继续监听锚点时要主动调用
stop()方法停止watcher,避免内存泄漏和多余的性能消耗 - 如果需要按自定义属性筛选,可给
ASAAnchorLocateCriteria的requiredFilterFields参数传入自定义标签,实现更精准的批量拉取
内容的提问来源于stack exchange,提问作者Rohit Joshi
相关产品推荐
相关产品推荐

