你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
如何使用 C++/NDK 中的粗略重新局部化来创建和查找定位点
Azure 空间定位点可以将设备上的定位传感器数据与所创建的定位点相关联。 此数据还可用于快速确定设备附近是否有任何定位点。 有关详细信息,请参阅粗略重新局部化。
必备条件
要完成本指南,请确保:
- 对 C++ 和 Android 本机开发工具包有一个基本的了解。
- 通读 Azure 空间定位点概述。
- 完成 5 分钟快速入门之一。
- 通读创建并找到定位点操作说明。
配置传感器指纹提供程序
首先,我们将创建和配置传感器指纹提供程序。 传感器指纹提供程序将负责读取设备上特定于平台的传感器,并将其读数转换为云空间定位点会话使用的通用表示形式。
重要
请确保在此检查你要启用的传感器在你的平台上是否可用。
// Create the sensor fingerprint provider
std::shared_ptr<PlatformLocationProvider> sensorProvider;
sensorProvider = std::make_shared<PlatformLocationProvider>();
// Allow GPS
const std::shared_ptr<SensorCapabilities>& sensors = sensorProvider->Sensors();
sensors->GeoLocationEnabled(true);
// Allow WiFi scanning
sensors->WifiEnabled(true);
// Populate the set of known BLE beacons' UUIDs
std::vector<std::string> uuids;
uuids.push_back("22e38f1a-c1b3-452b-b5ce-fdb0f39535c1");
uuids.push_back("a63819b9-8b7b-436d-88ec-ea5d8db2acb0");
// Allow the set of known BLE beacons
sensors->BluetoothEnabled(true);
sensors->KnownBeaconProximityUuids(uuids);
配置云空间定位点会话
接下来,我们将负责配置云空间定位点会话。 在第一行,我们在会话上设置了传感器提供程序。 从现在开始,我们在会话期间创建的所有定位点都将与一组传感器读数相关联。 接下来,我们会实例化近设备定位条件,并将其初始化以符合应用程序的要求。 最后,通过从近设备条件创建观察程序来指示会话在查找定位点时使用传感器数据。
// Set the session's sensor fingerprint provider
cloudSpatialAnchorSession->LocationProvider(sensorProvider);
// Configure the near-device criteria
auto nearDeviceCriteria = std::make_shared<NearDeviceCriteria>();
nearDeviceCriteria->DistanceInMeters(5.0f);
nearDeviceCriteria->MaxResultCount(25);
// Set the session's locate criteria
auto anchorLocateCriteria = std::make_shared<AnchorLocateCriteria>();
anchorLocateCriteria->NearDevice(nearDeviceCriteria);
cloudSpatialAnchorSession->CreateWatcher(anchorLocateCriteria);
创建观察程序后,将为所请求的每个定位点触发 AnchorLocated
事件。 找到定位点或无法找到定位点时都会触发此事件。 如果发生这种情况,将在状态中说明原因。 在处理完观察程序的所有定位点(找到或未找到)后,将触发 LocateAnchorsCompleted
事件。 每个观察程序有 35 个标识符的限制。
后续步骤
本指南介绍如何使用设备上的传感器创建和查找定位点。 若要了解有关粗略重新局部化的详细信息,请继续学习下一指南。