Understanding the AnchorLocateCriteria class
In this article you will learn the different options you can use when querying an anchor. We will go over the AnchorLocateCriteria class, its options and valid option combinations.
Anchor locate criteria
The AnchorLocateCriteria class helps you query the service for previously created anchors. One AnchorLocateCriteria object may be used per watcher at any time. Each AnchorLocateCriteria object must include exactly one of the following properties: Identifiers, NearAnchor, or NearDevice. Additional properties such as Strategy, BypassCache, and RequestedCategories can be set if desired.
Define exactly one of the following properties in your watcher:
Default Value: empty string array
Using Identifiers, you can define a list of anchor IDs for anchors you would like to locate. Anchor IDs are initially returned to you after successful anchor creation. With Identifiers specified, AnchorLocateCriteria restricts the set of requested anchors to anchors with matching anchor IDs. This property is specified using a string array.
Default Value: not set
Using NearAnchor, you can specify that AnchorLocateCriteria restricts the set of requested anchors to anchors within a desired distance away from a chosen anchor. You must provide this chosen anchor as the source anchor. You may also set the desired distance away from the source anchor, and the maximum number of anchors returned, to further limit the search. This property is specified using a NearAnchorCriteria object.
Default Value: not set
Using NearDevice, you can specify that AnchorLocateCriteria restricts the set of requested anchors to those close to the device’s physical location. Any enabled sensors will be used to help discover anchors around your device. To have the best chance of finding anchors, you should configure SensorCapabilities to give the session access to all appropriate sensors. For more information on setting up and using this property, see Coarse Relocalization - Azure Spatial Anchors | Microsoft Docs and How to create and locate anchors using coarse relocalization in C#, Objective-C, Swift, Java, C++/NDK, C++/WinRT. This property is specified using a NearDeviceCriteria object.
Default Value: false
When an anchor has been created or found in a session, it is also stored in the cache. With this property set to false, any subsequent query in the same session will return the cached value. No request to the ASA service is made.
Default Value: Properties | Spatial
This property is used to determine what data is returned from a query using AnchorLocateCriteria. The default value returns both properties and spatial data, this should not be changed if properties and spatial data are both desired. This property can be specified using the AnchorDataCategory enum.
|AnchorDataCategory Enum Value||Returned Data|
|None||No data is returned|
|Properties||Anchor properties including AppProperties are returned.|
|Spatial||Spatial information about an anchor is returned.|
Default Value: AnyStrategy
Strategy further defines how anchors should be located. The Strategy property may be specified using a LocateStrategy enum.
|LocateStrategy Enum Value||Description|
|AnyStrategy||This strategy permits the system to use combinations of VisualInformation and Relationship strategies to find anchors.|
|VisualInformation||This strategy attempts to find anchors by matching visual information from the current surroundings to those of the anchor’s visual footprint. An anchor’s visual footprint refers to the visual information currently associated with the anchor. This visual information is typically but not exclusively gathered during anchor creation. Currently, this strategy is only permitted in conjunction with the NearDevice or Identifiers properties.|
|Relationship||This strategy attempts to find anchors by making use of existing connected anchors. Currently, this strategy is only permitted in conjunction with the NearAnchor or Identifiers properties. When used with the Identifiers property, it is required that, in the same session, the user should have previously located an anchor(s) with already established connective relationships to the anchors whose IDs are specified in the Identifiers array.|
Valid combinations of LocateStrategy and AnchorLocateCriteria properties
Not all combinations of Strategy and AnchorLocateCriteria properties are currently permitted by the system. The following table shows the allowed combinations:
|NearAnchor||✓ (will default to Relationship)||✓|
See How to create and locate anchors using Azure Spatial Anchors for some more examples using the AnchorLocateCriteria class.