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.
Interrogation de données géospatiales avec Amazon DocumentDB
Cette section explique comment interroger des données géospatiales avec Amazon DocumentDB. Après avoir lu cette section, vous serez en mesure de savoir comment stocker, interroger et indexer des données géospatiales dans Amazon DocumentDB.
Rubriques
Présentation
Les cas d'utilisation courants de la géospatiale impliquent l'analyse de proximité à partir de vos données. Par exemple, « trouver tous les aéroports situés dans un rayon de 80 miles de Seattle » ou « trouver les restaurants les plus proches d'un endroit donné ». Amazon DocumentDB utilise la JSONspécification Geo
Indexation et stockage de données géospatiales
Amazon DocumentDB utilise le JSON type géographique « Point » pour stocker les données géospatiales. Chaque JSON document géographique (ou sous-document) est généralement composé de deux champs :
-
type : la forme représentée, qui indique à Amazon DocumentDB comment interpréter le champ « coordonnées ». Pour le moment, Amazon DocumentDB ne prend en charge que les points
-
coordonnées — une paire de latitude et de longitude représentée sous la forme d'un objet dans un tableau — [longitude, latitude]
Amazon DocumentDB utilise également des index 2dsphere pour indexer les données géospatiales. Amazon DocumentDB prend en charge les points d'indexation. Amazon DocumentDB prend en charge les requêtes de proximité avec l'indexation 2dsphere.
Imaginons un scénario dans lequel vous créez une application pour un service de livraison de nourriture. Vous souhaitez stocker la paire de latitudes et de longitude de différents restaurants dans Amazon DocumentDB. Pour ce faire, nous vous recommandons de créer d'abord un index dans le champ Géospatial contenant la paire de latitude et de longitude.
use restaurantsdb db.usarestaurants.createIndex({location:"2dsphere"})
Le résultat de cette commande ressemblerait à ceci :
{ "createdCollectionAutomatically" : true, "numIndexesBefore" : 1, "numIndexesAfter" : 2, "ok" : 1 }
Une fois que vous avez créé un index, vous pouvez commencer à insérer des données dans votre collection Amazon DocumentDB.
db.usarestaurants.insert({ "state":"Washington", "city":"Seattle", "name":"Thai Palace", "rating": 4.8, "location":{ "type":"Point", "coordinates":[ -122.3264, 47.6009 ] } }); db.usarestaurants.insert({ "state":"Washington", "city":"Seattle", "name":"Noodle House", "rating": 4.8, "location":{ "type":"Point", "coordinates":[ -122.3517, 47.6159 ] } }); db.usarestaurants.insert({ "state":"Washington", "city":"Seattle", "name":"Curry House", "rating": 4.8, "location":{ "type":"Point", "coordinates":[ -121.4517, 47.6229 ] } });
Interrogation de données géospatiales
Amazon DocumentDB prend en charge les requêtes de proximité, d'inclusion et d'intersection de données géospatiales. Un bon exemple de requête de proximité consiste à rechercher tous les points (tous les aéroports) situés à moins d'une certaine distance et à plus d'une distance d'un autre point (ville). Un bon exemple de requête d'inclusion consiste à rechercher tous les points (tous les aéroports) situés dans une zone/un polygone spécifique (État de New York). Un bon exemple de requête d'intersection consiste à trouver un polygone (état) qui croise un point (ville). Vous pouvez utiliser les opérateurs géospatiaux suivants pour obtenir des informations à partir de vos données.
-
$nearSphere
-$nearSphere
est un opérateur de recherche qui permet de rechercher des points du plus proche au plus éloigné d'un point géographiqueJSON. -
$geoNear
-$geoNear
est un opérateur d'agrégation qui permet de calculer la distance en mètres à partir d'un JSON point géographique. -
$minDistance
-$minDistance
est un opérateur de recherche utilisé conjointement avec$nearSphere
ou$geoNear
pour filtrer les documents situés au moins à la distance minimale spécifiée par rapport au point central. -
$maxDistance
-$maxDistance
est un opérateur de recherche utilisé conjointement avec$nearSphere
ou$geoNear
pour filtrer les documents situés au maximum à la distance maximale spécifiée par rapport au point central. -
$geoWithin
-$geoWithin
est un opérateur de recherche qui permet de rechercher des documents contenant des données géospatiales qui existent entièrement dans une forme spécifiée, telle qu'un polygone. -
$geoIntersects
-$geoIntersects
est un opérateur de recherche qui permet de rechercher des documents dont les données géospatiales croisent un objet géographique spécifié. JSON
Note
$geoNear
et $nearSphere
exigez un index 2dsphere sur le JSON champ Geo que vous utilisez dans votre requête de proximité.
Exemple 1
Dans cet exemple, vous allez apprendre comment rechercher tous les restaurants (points) triés par distance la plus proche d'une adresse (point).
Pour effectuer une telle requête, vous pouvez l'utiliser $geoNear
pour calculer la distance d'un ensemble de points par rapport à un autre point. Vous pouvez également ajouter le distanceMultiplier
pour mesurer la distance en kilomètres.
db.usarestaurants.aggregate([ { "$geoNear":{ "near":{ "type":"Point", "coordinates":[ -122.3516, 47.6156 ] }, "spherical":true, "distanceField":"DistanceKilometers", "distanceMultiplier":0.001 } } ])
La commande ci-dessus renverrait les restaurants triés par distance (du plus proche au plus éloigné) du point spécifié. La sortie de cette commande ressemblerait à ceci
{ "_id" : ObjectId("611f3da985009a81ad38e74b"), "state" : "Washington", "city" : "Seattle", "name" : "Noodle House", "rating" : 4.8, "location" : { "type" : "Point", "coordinates" : [ -122.3517, 47.6159 ] }, "DistanceKilometers" : 0.03422834547294996 } { "_id" : ObjectId("611f3da185009a81ad38e74a"), "state" : "Washington", "city" : "Seattle", "name" : "Thai Palace", "rating" : 4.8, "location" : { "type" : "Point", "coordinates" : [ -122.3264, 47.6009 ] }, "DistanceKilometers" : 2.5009390081704277 } { "_id" : ObjectId("611f3dae85009a81ad38e74c"), "state" : "Washington", "city" : "Seattle", "name" : "Curry House", "rating" : 4.8, "location" : { "type" : "Point", "coordinates" : [ -121.4517, 47.6229 ] }, "DistanceKilometers" : 67.52845344856914 }
Pour limiter le nombre de résultats d'une requête, utilisez l'num
option limit
ou.
limit
:
db.usarestaurants.aggregate([ { "$geoNear":{ "near":{ "type":"Point", "coordinates":[ -122.3516, 47.6156 ] }, "spherical":true, "distanceField":"DistanceKilometers", "distanceMultiplier":0.001, "limit": 10 } } ])
num
:
db.usarestaurants.aggregate([ { "$geoNear":{ "near":{ "type":"Point", "coordinates":[ -122.3516, 47.6156 ] }, "spherical":true, "distanceField":"DistanceKilometers", "distanceMultiplier":0.001, "num": 10 } } ])
Note
$geoNear
stage prend en charge les num
options limit
et pour spécifier le nombre maximum de documents à renvoyer. $geoNear
renvoie un maximum de 100 documents par défaut si les num
options limit
ou ne sont pas spécifiées. Cette valeur est remplacée par la valeur de l'$limit
étape si elle est présente et la valeur est inférieure à 100.
Exemple 2
Dans cet exemple, vous allez apprendre comment trouver tous les restaurants (points) situés dans un rayon de 2 kilomètres d'une adresse spécifique (point). Pour effectuer une telle requête, vous pouvez utiliser un $nearSphere
minimum $minDistance
et un maximum $maxDistance
à partir d'un point géographique JSON
db.usarestaurants.find({ "location":{ "$nearSphere":{ "$geometry":{ "type":"Point", "coordinates":[ -122.3516, 47.6156 ] }, "$minDistance":1, "$maxDistance":2000 } } }, { "name":1 })
La commande ci-dessus renverrait les restaurants à une distance maximale de 2 kilomètres du point spécifié. La sortie de cette commande ressemblerait à ceci
{ "_id" : ObjectId("611f3da985009a81ad38e74b"), "name" : "Noodle House" }
Limites
Amazon DocumentDB ne prend pas en charge l'interrogation ou l'indexation des polygones,,,, LineString et. MultiPoint MultiPolygon MultiLineString GeometryCollection