

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Indexation des données de localisation
<a name="location-indexing-geoquery"></a>

Vous pouvez utiliser l'indexation de flotte [AWS IoT pour indexer](https://docs.aws.amazon.com//iot/latest/developerguide/iot-indexing.html) les dernières données de localisation envoyées par vos appareils et rechercher des appareils à l'aide de géorequêtes. Cette fonctionnalité résout les cas d’utilisation de surveillance et de gestion des appareils tels que le suivi de localisation et la recherche de proximité. L'indexation des emplacements fonctionne de la même manière que les autres fonctionnalités d'indexation de flotte, avec des configurations supplémentaires à spécifier dans [l'indexation de vos objets](managing-fleet-index.md). 

Les cas d'utilisation courants incluent : rechercher et regrouper des appareils situés dans les limites géographiques souhaitées, obtenir des informations spécifiques à l'emplacement à l'aide de termes de requête liés aux métadonnées et à l'état de l'appareil à partir de sources de données indexées, fournir une vue granulaire telle que le filtrage des résultats sur une zone géographique spécifique pour réduire les délais de rendu dans les cartes de surveillance de votre flotte, suivre l'emplacement du dernier appareil signalé, identifier les appareils qui se trouvent en dehors des limites souhaitées et générer des alarmes à l'aide des [métriques de la flotte](iot-fleet-metrics.md). Pour commencer à utiliser l'indexation des emplacements et les géorequêtes, consultez [Didacticiel de démarrage](location-indexing-tutorial.md).

## Formats de données pris en charge
<a name="location-indexing-format"></a>

AWS IoT l'indexation de flotte prend en charge les formats de données de localisation suivants :

1. 

**Représentation textuelle bien connue de systèmes de coordonnées de référence**

   Une chaîne qui suit le format [Informations géographiques - Représentation textuelle connue des systèmes de référence de coordonnées](https://docs.ogc.org/is/12-063r5/12-063r5.html). Un exemple peut être `"POINT(long lat)"`.

1. 

**Une chaîne qui représente les coordonnées**

   Une chaîne au format `"latitude, longitude"` ou `"longitude, latitude"`. Si vous utilisez `"longitude, latitude"`, vous devez également spécifier `order` dans `geoLocations`. Un exemple peut être `"41.12,-71.34"`.

1. 

**Un objet des clés lat(latitude), lon(longitude)**

   Ce format est applicable à la shadow classique et nommée. Clés prises en charge : `lat`, `latitude`, `lon`, `long`, `longitude`. Un exemple peut être `{"lat": 41.12, "lon": -71.34}`.

1. 

**Un tableau qui représente les coordonnées**

   Un tableau au format `[lat,lon]` ou`[lon,lat]`. Si vous utilisez le format `[lon,lat]`, qui est identique aux coordonnées dans [GeoJSON](https://geojson.org/) (applicable à la shadow classique et nommée), vous devez également spécifier `order` dans `geoLocations`.

   Un exemple peut être :

   ```
   {
     "location": {
       "coordinates": [
         **Longitude**,
         **Latitude**
       ],
       "type": "Point",
       "properties": {
         "country": "United States",
         "city": "New York",
         "postalCode": "*****",
         "horizontalAccuracy": 20,
         "horizontalConfidenceLevel": 0.67,
         "state": "New York",
         "timestamp": "2023-01-04T20:59:13.024Z"
       }
     }
   }
   ```

## Comment indexer les données de localisation
<a name="location-indexing-steps"></a>

Les étapes suivantes montrent comment mettre à jour la configuration d'indexation pour vos données de localisation et utiliser des géorequêtes pour rechercher des appareils.

1. 

**Sachez où sont stockées vos données de localisation**

   L'indexation des flottes prend actuellement en charge l'indexation des données de localisation stockées dans des shadows classiques ou nommées.

1. 

**Utiliser les formats de données de localisation pris en charge**

   Assurez-vous que le format de vos données de localisation suit l'un des [formats de données pris en charge](#location-indexing-format).

1. 

**Mettre à jour la configuration de l'indexation**

   Au minimum, activez la configuration d'indexation des objets (registre). Vous devez également activer l'indexation sur les shadows classiques ou nommées contenant vos données de localisation. Lorsque vous mettez à jour l'indexation de vos objets, vous devez inclure vos données de localisation dans la configuration d'indexation.

1. 

**Créer et exécuter des géorequêtes**

   En fonction de vos cas d'utilisation, créez des géorequêtes et exécutez-les pour rechercher des appareils. La géorequête que vous composez doit suivre la [Syntaxe de requête](https://docs.aws.amazon.com//iot/latest/developerguide/query-syntax.html). Vous trouverez quelques exemples dans [Exemples de géorequêtes](#location-indexing-geoqueries).

## Mettre à jour la configuration de l'indexation des objets
<a name="location-indexing-configuration"></a>

Pour indexer les données de localisation, vous devez mettre à jour la configuration d'indexation et inclure vos données de localisation. En fonction de l'endroit où vos données de localisation sont stockées, suivez les étapes pour mettre à jour votre configuration d'indexation :

### Données de localisation stockées dans des shadows classiques
<a name="location-indexing-shadow-configuration"></a>

Si vos données de localisation sont stockées dans une shadow classique, vous devez définir `thingIndexingMode` comme tel `REGISTRY_AND_SHADOW` et spécifier vos données de localisation dans les champs `geoLocations` (`name`et `order`) de [https://docs.aws.amazon.com//iot/latest/apireference/API_IndexingFilter.html](https://docs.aws.amazon.com//iot/latest/apireference/API_IndexingFilter.html).

Dans l'exemple de configuration d'indexation d'objets suivant, vous spécifiez le chemin des données de localisation `shadow.reported.coordinates` comme `name` et `LonLat` comme `order`.

```
{
	"thingIndexingMode": "REGISTRY_AND_SHADOW",
	"filter": {
		"geoLocations": [
			{
				"name": "shadow.reported.coordinates",
				"order": "LonLat"
			}
		]
	}
}
```
+ `thingIndexingMode`

  Le mode d'indexation contrôle si le registre ou le shadow est indexé. Lorsque `thingIndexingMode` est défini sur `OFF`, l'indexation des objets est désactivée. 

  Pour indexer les données de localisation stockées dans un shadow classique, vous devez définir `thingIndexingMode` sur `REGISTRY_AND_SHADOW`. Pour de plus amples informations, veuillez consulter [Modes d'indexation d’objets](managing-index.md#index-mode).
+ `filter`

  Le filtre d'indexation fournit des sélections supplémentaires pour les shadows nommées et les données de géolocalisation. Pour de plus amples informations, veuillez consulter [Filtre d'indexation](managing-index.md#thing-indexing-filter).
+ `geoLocations`

  Liste des cibles de géolocalisation que vous sélectionnez pour indexer. Par défaut, le nombre maximal de cibles de géolocalisation pour l'indexation est `1`. Pour augmenter la limite, consultez [AWS IoT Device Management Quotas](https://docs.aws.amazon.com//general/latest/gr/iot_device_management.html#fleet-indexing-limits).
+ `name`

  Nom du champ cible de géolocalisation. Un exemple de valeur de `name` peut être le chemin des données de localisation de votre shadow : `shadow.reported.coordinates`.
+ `order`

  L'ordre du champ cible de géolocalisation. Valeurs valides : `LatLon` et `LonLat`. `LatLon` signifie latitude et longitude. `LonLat`signifie longitude et latitude. Ce champ est facultatif. La valeur par défaut est `LatLon`.

### Données de localisation stockées dans des shadows nommées
<a name="location-indexing-named-shadow-configuration"></a>

Si vos données de localisation sont stockées dans une shadow nommée, définissez `namedShadowIndexingMode` comme étant `ON`, ajoutez le ou les noms de votre shadow nommée au champ `namedShadowNames` dans [https://docs.aws.amazon.com//iot/latest/apireference/API_IndexingFilter.html](https://docs.aws.amazon.com//iot/latest/apireference/API_IndexingFilter.html) et spécifiez le chemin de vos données de position dans le champ `geoLocations` dans [https://docs.aws.amazon.com//iot/latest/apireference/API_IndexingFilter.html](https://docs.aws.amazon.com//iot/latest/apireference/API_IndexingFilter.html).

Dans l'exemple de configuration d'indexation d'objets suivant, vous spécifiez le chemin des données de localisation `shadow.name.namedShadow1.reported.coordinates` comme `name` et `LonLat` comme `order`.

```
{
	"thingIndexingMode": "REGISTRY",
	"namedShadowIndexingMode": "ON",
	"filter": {
		"namedShadowNames": [
			"namedShadow1"
		],
		"geoLocations": [
			{
				"name": "shadow.name.namedShadow1.reported.coordinates",
				"order": "LonLat"
			}
		]
	}
}
```
+ `thingIndexingMode`

  Le mode d'indexation contrôle si le registre ou le shadow est indexé. Lorsque `thingIndexingMode` est défini sur `OFF`, l'indexation des objets est désactivée. 

  Pour indexer les données de localisation stockées dans une shadow nommée, vous devez définir `thingIndexingMode` comme étant `REGISTRY` (ou`REGISTRY_AND_SHADOW`). Pour de plus amples informations, veuillez consulter [Modes d'indexation d’objets](managing-index.md#index-mode).
+ `filter`

  Le filtre d'indexation fournit des sélections supplémentaires pour les shadows nommées et les données de géolocalisation. Pour de plus amples informations, veuillez consulter [Filtre d'indexation](managing-index.md#thing-indexing-filter).
+ `geoLocations`

  Liste des cibles de géolocalisation que vous sélectionnez pour indexer. Par défaut, le nombre maximal de cibles de géolocalisation pour l'indexation est `1`. Pour augmenter la limite, consultez [AWS IoT Device Management Quotas](https://docs.aws.amazon.com//general/latest/gr/iot_device_management.html#fleet-indexing-limits).
+ `name`

  Nom du champ cible de géolocalisation. Un exemple de valeur de `name` peut être le chemin des données de localisation de votre shadow : `shadow.name.namedShadow1.reported.coordinates`.
+ `order`

  L'ordre du champ cible de géolocalisation. Valeurs valides : `LatLon` et `LonLat`. `LatLon` signifie latitude et longitude. `LonLat`signifie longitude et latitude. Ce champ est facultatif. La valeur par défaut est `LatLon`.

## Exemples de géorequêtes
<a name="location-indexing-geoqueries"></a>

Une fois que vous avez terminé la configuration d'indexation de vos données de localisation, exécutez des géorequêtes pour rechercher des appareils. Vous pouvez également combiner vos géorequêtes avec d'autres chaînes de requête. Pour plus d’informations, consultez [Syntaxe de requête](query-syntax.md) et [Exemples de requêtes sur des objets](example-queries.md).

**Exemple de requête 1**

Cet exemple suppose que les données de localisation sont stockées dans une shadow nommée `gps-tracker`. Le résultat de cette commande est la liste des périphériques situés à une distance radiale de 15,5 km du point central avec des coordonnées (47.6204, -122.3491).

```
aws iot search-index --query-string \
"shadow.name.gps-tracker.reported.coordinates:geo_distance,47.6204,-122.3491,15.5km"
```

**Exemple de requête 2**

Cet exemple suppose que les données de localisation sont stockées dans un shadow classique. Le résultat de cette commande est la liste des périphériques situés à une distance radiale de 15,5 km du point central avec des coordonnées (47.6204, -122.3491).

```
aws iot search-index --query-string \
"shadow.reported.coordinates:geo_distance,47.6204,-122.3491,15.5km"
```

**Exemple de requête 3**

Cet exemple suppose que les données de localisation sont stockées dans un shadow classique. Le résultat de cette commande est la liste des appareils qui ne sont pas connectés et situés en dehors de la distance radiale de 15,5 km du point central avec des coordonnées (47.6204, -122.3491).

```
aws iot search-index --query-string \
"connectivity.connected:false AND (NOT shadow.reported.coordinates:geo_distance,47.6204,-122.3491,15.5km)"
```

# Didacticiel de démarrage
<a name="location-indexing-tutorial"></a>

Ce didacticiel explique comment utiliser [l'indexation de flotte](iot-indexing.md) pour indexer [vos données de localisation](location-indexing-geoquery.md). Pour simplifier, vous créez un objet pour représenter votre appareil et vous stockez les données de localisation dans une shadow nommée, vous mettez à jour la configuration d'indexation des objets pour l'indexation des emplacements et vous exécutez des exemples de géorequêtes pour rechercher des appareils dans une limite radiale.

Ce didacticiel vous prendra environ 15 minutes.

**Topics**
+ [Conditions préalables](#location-indexing-tutorial-prerequisites)
+ [Créez des objets et shadow](#location-indexing-create-resources)
+ [Mettre à jour la configuration de l'indexation des objets](#location-indexing-update-configuration)
+ [Exécuter une géorequête](#location-indexing-run-geoquery)

## Conditions préalables
<a name="location-indexing-tutorial-prerequisites"></a>
+ Installez la dernière version de [AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html).
+ Familiarisez-vous avec [l'indexation des emplacements et les géorequêtes](https://docs.aws.amazon.com/iot/latest/developerguide/location-indexing-geoquery.html), la [gestion de l'indexation des objets](https://docs.aws.amazon.com/iot/latest/developerguide/managing-index.html) et la [syntaxe des requêtes](https://docs.aws.amazon.com/iot/latest/developerguide/query-syntax.html).

## Créez des objets et shadow
<a name="location-indexing-create-resources"></a>

Vous créez un objet pour représenter votre appareil et une shadow nommée pour stocker ses données de localisation (coordonnées 47.61564, -122.33584).

1. Exécutez la commande suivante pour créer votre objet qui représente votre vélo nommé Bike-1. *Pour plus d'informations sur la façon de créer un objet en utilisant AWS CLI, voir [create-thing from *AWS CLI*Reference](https://docs.aws.amazon.com//cli/latest/reference/iot/create-thing.html).*

   ```
   aws iot create-thing --thing-name "Bike-1" \
   --attribute-payload '{"attributes": {"model":"OEM-2302-12", "battery":"35", "acqDate":"06/09/23"}}'
   ```

   Le résultat de cette commande peut ressembler à ce qui suit :

   ```
   {
       "thingName": "Bike-1",
       "thingArn": "arn:aws:iot:us-east-1:123456789012:thing/Bike-1",
       "thingId": "df9cf01d-b0c8-48fe-a2e2-e16cff6b23df"
   }
   ```

1. Exécutez la commande suivante pour créer une shadow nommée afin de stocker les données de localisation du Bike-1 (coordonnées 47.61564, -122.33584). Pour plus d'informations sur la façon de créer une ombre nommée à l'aide de AWS CLI, reportez-vous [update-thing-shadow](https://docs.aws.amazon.com//cli/latest/reference/iot-data/update-thing-shadow.html)à la section *AWS CLI**Référence*.

   ```
   aws iot-data update-thing-shadow \
   --thing-name Bike-1 \
   --shadow-name Bike1-shadow \
   --cli-binary-format raw-in-base64-out \
   --payload '{"state":{"reported":{"coordinates":{"lat": 47.6153, "lon": -122.3333}}}}' \
   "output.txt" \
   ```

   Cette commande ne produit aucune sortie. Pour afficher l'ombre nommée que vous avez créée, vous pouvez exécuter la commande CLI [list-named-shadows-for-thing](https://docs.aws.amazon.com//cli/latest/reference/iot-data/list-named-shadows-for-thing.html).

   ```
   aws iot-data list-named-shadows-for-thing --thing-name Bike-1
   ```

   Le résultat de cette commande peut ressembler à ce qui suit :

   ```
   {
       "results": [
           "Bike1-shadow"
       ],
       "timestamp": 1699574309
   }
   ```

## Mettre à jour la configuration de l'indexation des objets
<a name="location-indexing-update-configuration"></a>

Pour indexer vos données de localisation, vous devez mettre à jour la configuration d'indexation de votre objet afin d'inclure les données de localisation. Dans la mesure où vos données de localisation sont stockées dans une shadow nommée dans ce didacticiel, définissez `thingIndexingMode` sur `REGISTRY` (au minimum), définissez `namedShadowIndexingMode` sur `ON` et ajoutez vos données de localisation à la configuration. Dans cet exemple, vous devez ajouter le nom de la shadow que vous avez nommée et le chemin des données de localisation de la shadow vers `filter`.

1. Exécutez la commande pour mettre à jour votre configuration d'indexation pour l'indexation des emplacements.

   ```
   aws iot update-indexing-configuration --cli-input-json '{
   "thingIndexingConfiguration": { "thingIndexingMode": "REGISTRY",
   "thingConnectivityIndexingMode": "OFF",
   "deviceDefenderIndexingMode": "OFF",
   "namedShadowIndexingMode": "ON",
   "filter": {
       "namedShadowNames": ["Bike1-shadow"],
       "geoLocations":[{
           "name":"shadow.name.Bike1-shadow.reported.coordinates"
       }]
   },
   "customFields": [
   { "name":"attributes.battery",
   "type":"Number"}] } }'
   ```

   La commande ne génère pas de sortie. Vous devrez peut-être attendre un moment jusqu'à ce que la mise à jour soit terminée. Pour vérifier l’état, exécutez la commande CLI [describe-index](https://docs.aws.amazon.com//cli/latest/reference/iot/describe-index.html). Si le message `indexStatus` indique :`ACTIVE`, la mise à jour de l'indexation de votre objet est terminée.

1. Exécutez la commande pour vérifier votre configuration d'indexation. Cette étape est facultative.

   ```
   aws iot get-indexing-configuration
   ```

   Le résultat se présentera comme suit :

   ```
   {
       "thingIndexingConfiguration": {
           "thingIndexingMode": "REGISTRY",
           "thingConnectivityIndexingMode": "OFF",
           "deviceDefenderIndexingMode": "OFF",
           "namedShadowIndexingMode": "ON",
           "managedFields": [
               {
                   "name": "shadow.name.*.hasDelta",
                   "type": "Boolean"
               },
               {
                   "name": "registry.version",
                   "type": "Number"
               },
               {
                   "name": "registry.thingTypeName",
                   "type": "String"
               },
               {
                   "name": "registry.thingGroupNames",
                   "type": "String"
               },
               {
                   "name": "shadow.name.*.version",
                   "type": "Number"
               },
               {
                   "name": "thingName",
                   "type": "String"
               },
               {
                   "name": "thingId",
                   "type": "String"
               }
           ],
           "customFields": [
               {
                   "name": "attributes.battery",
                   "type": "Number"
               }
           ],
           "filter": {
               "namedShadowNames": [
                   "Bike1-shadow"
               ],
               "geoLocations": [
                   {
                       "name": "shadow.name.Bike1-shadow.reported.coordinates",
                       "order": "LatLon"
                   }
               ]
           }
       },
       "thingGroupIndexingConfiguration": {
           "thingGroupIndexingMode": "OFF"
       }
   }
   ```

## Exécuter une géorequête
<a name="location-indexing-run-geoquery"></a>

Vous avez maintenant mis à jour la configuration d'indexation de vos objets pour inclure les données de localisation. Essayez de créer des géorequêtes et de les exécuter pour voir si vous pouvez obtenir les résultats de recherche souhaités. Une doit respecter la [Syntaxe de requête](query-syntax.md). Vous trouverez des exemples de géorequêtes utiles dans [Exemples de géorequêtes](location-indexing-geoquery.md#location-indexing-geoqueries).

Dans l'exemple de commande suivant, vous utilisez la géorequête `shadow.name.Bike1-shadow.reported.coordinates:geo_distance,47.6204,-122.3491,15.5km` pour rechercher des appareils situés à une distance radiale de 15,5 km du point central avec des coordonnées (47.6204, -122.3491). 

```
aws iot search-index --query-string "shadow.name.Bike1-shadow.reported.coordinates:geo_distance,47.6204,-122.3491,15.5km"
```

Étant donné que vous disposez d'un appareil situé aux coordonnées « lat »: 47.6153, « lon »: -122.3333, qui se situe à une distance de 15,5 km du point central, vous devriez pouvoir voir cet appareil (Bike-1) dans la sortie. Le résultat se présentera comme suit :

```
{
    "things": [
        {
            "thingName": "Bike-1",
            "thingId": "df9cf01d-b0c8-48fe-a2e2-e16cff6b23df",
            "attributes": {
                "acqDate": "06/09/23",
                "battery": "35",
                "model": "OEM-2302-12"
            },
            "shadow": "{\"reported\":{\"coordinates\":{\"lat\":47.6153,\"lon\":-122.3333}},\"metadata\":{\"reported\":{\"coordinates\":{\"lat\":{\"timestamp\":1699572906},\"lon\":{\"timestamp\":1699572906}}}},\"hasDelta\":false,\"version\":1}"
        }
    ]
}
```

Pour de plus amples informations, veuillez consulter [Indexation des données de localisation](location-indexing-geoquery.md).