如何在 C++/WinRT 中使用粗略重新定位建立和尋找錨點

Azure 空間錨點可以將裝置上、定位感應器資料與您建立的錨點建立關聯。 此資料也可以用來快速判斷您的裝置附近是否有任何錨點。 如需詳細資訊,請參閱粗略重新定位

必要條件

若要完成本指南,請確定您:

設定感應器指紋提供者

首先,我們會建立及設定感應器指紋提供者。 感應器指紋提供者會負責讀取您裝置上的平台特定感應器,並將其讀數轉換為雲端空間錨點工作階段所取用的常見表示法。

重要

請務必在這裡檢查 您啟用的感應器是否可在您的平臺上使用。

// Create the sensor fingerprint provider
PlatformLocationProvider sensorProvider = PlatformLocationProvider();

// Allow GPS
SensorCapabilities sensors = sensorProvider.Sensors()
sensors.GeoLocationEnabled(true);

// Allow WiFi scanning
sensors.WifiEnabled(true);

// Populate the set of known BLE beacons' UUIDs
std::vector<winrt::hstring> uuids;
uuids.emplace_back("22e38f1a-c1b3-452b-b5ce-fdb0f39535c1");
uuids.emplace_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
NearDeviceCriteria nearDeviceCriteria = NearDeviceCriteria();
nearDeviceCriteria.DistanceInMeters(5.0f);
nearDeviceCriteria.MaxResultCount(25);

// Set the session's locate criteria
anchorLocateCriteria = AnchorLocateCriteria();
anchorLocateCriteria.NearDevice(nearDeviceCriteria);
cloudSpatialAnchorSession.CreateWatcher(anchorLocateCriteria);

監看員建立後,系統會針對每個要求的錨點引發 AnchorLocated 事件。 在找到錨點時,或找不到錨點時,都會引發此事件。 如果發生這種情況,將會在狀態中指出原因。 在處理完監看員的所有錨點後 (包括找到和找不到的),就會引發 LocateAnchorsCompleted 事件。 每個監看員有 35 個識別碼的限制。

下一步

在本指南中,您已了解如何使用裝置上感應器來建立和尋找錨點。 若要深入了解粗略重新定位,請繼續進行下一個指南。