Comment implémenter les fonctionnalités géospatiales de MongoDB

Comment Implementer Les Fonctionnalites Geospatiales De Mongodb



La fonctionnalité géospatiale de MongoDB offre un moyen simple de stocker les données géographiques dans une base de données. Essentiellement, nous pouvons stocker les données géospatiales dans MongoDB en tant qu'objets GeoJSON. GeoJSON est un format gratuit et open source qui dépend de la notation d'objet JavaScript avec des données géographiques simples. Cette fonctionnalité est importante pour les applications qui nécessitent des services basés sur l'emplacement, tels que le processus de cartographie, basé sur la recherche d'emplacement, etc. Cet article couvre la fonctionnalité géospatiale avec un exemple d'implémentation.

Ajout de documents dans la collection pour les entités géospatiales

Pour démontrer la fonctionnalité de la fonctionnalité MongoDB Geospatial, nous avons besoin des documents de la collection spécifique. Nous insérons quelques documents dans la collection « area » comme indiqué ci-dessous :

db.area.insertMany( [
{
nom: 'Parc pour enfants' ,
Type de lieu: 'Indiquer' , coordonnées : [ - 60,97 , 30.77 ] },
catégorie: 'Jardin'
},
{
nom: 'Espace étudiant' ,
Type de lieu: 'Indiquer' , coordonnées : [ - 60.9928 , 30.7193 ] },
catégorie: 'Jardin'
},
{
nom: 'Terrain de football' ,
Type de lieu: 'Indiquer' , coordonnées : [ - 60.9375 , 30.8303 ] },
catégorie: 'Stade'
}
] )

Nous avons des documents qui contiennent les données de localisation telles que les coordonnées. De plus, nous créons un index géospatial sur le terrain pour optimiser les performances des requêtes géospatiales.









Exemple 1 : Utilisation de l'opérateur de requête $geoIntersects

Tout d’abord, nous avons l’opérateur $geoIntersects de l’entité géospatiale qui croise l’objet fourni. Considérez l'implémentation suivante de l'opérateur $geoIntersects :



db.area.find({ emplacement : { $geoIntersects : { $geometry : { type : 'Indiquer' ,

coordonnées : [ - 60,97 , 30.77 ] } } } })

Dans l'exemple, nous appelons la collection « area » avec l'opération « find ». À la méthode find(), nous transmettons les ensembles de champs « location » à l’opérateur de requête $geoIntersects de l’entité géospatiale. Ceci est utilisé pour vérifier si le point spécifié croise la géométrie stockée dans le champ de géométrie.





Ensuite, l'opérateur $geoIntesects prend l'opérateur $geometry où le champ de type est défini avec la valeur « Point » et le champ de coordonnées est donné avec les valeurs « coordonnées ». Ici, la $geometry est définie pour la comparaison géospatiale.

La sortie suivante indique l'endroit où le document attendu est récupéré et où le champ géométrique contient un objet géométrique qui croise le point spécifié :



Exemple 2 : utilisation de l'opérateur de requête $near

L'opérateur $near est également la fonctionnalité géospatiale utilisée pour effectuer les requêtes géospatiales afin d'identifier les documents géographiquement proches d'un lieu donné. Il récupère les documents classés en fonction de leur proximité avec l'emplacement spécifié. Ici, nous fournissons l'implémentation de l'opérateur $near :

db.area.find(
{
emplacement:
{ $près de :
{
$géométrie : { tapez : 'Indiquer' ,  coordonnées : [ - 60.9667 , 30.78 ] },
$minDistance : 1000 ,
$maxDistance : 5000
}
}
}
)

Dans l'exemple, nous définissons le champ «location» de la collection «area» à l'intérieur de l'opération «find». Ensuite, nous définissons l'opérateur de requête $near de l'entité géospatiale sur ce champ « emplacement ». L'opérateur $near recherche le point proche avec le point de coordonnées donné. Ensuite, nous utilisons les paramètres $minDistance et $maxDistance dans l'opérateur $near qui reçoivent certaines valeurs pour récupérer les documents dans la plage de distance spécifiée à partir du point donné.

Le document est récupéré dans la sortie qui se trouve à proximité des emplacements ou points d'intérêt spécifiés dans une collection de « zones » géospatiales :

Exemple 3 : Utilisation de l'opérateur de requête $nearsphere

Alternativement, nous avons l'opérateur $nearsphere qui est similaire à l'opérateur $near, mais $nearSphere prend en compte la forme sphérique de la Terre lors du calcul des distances.

db.area.find(
{
emplacement: {
$près deSphère : {
$géométrie : {
taper : 'Indiquer' ,
coordonnées : [ - 60.9667 , 30.78 ]
},
$minDistance : 1000 ,
$maxDistance : 5000
}
}
}
)

Dans l'exemple, nous utilisons l'opérateur $nearsphere de la requête géospatiale. L'opérateur $nearspehere recherche ici le document dont les points les plus proches sont proches des points spécifiés dans la requête, et les points sont définis sur le tableau de champs de coordonnées.

Après cela, nous affinons les résultats en établissant les paramètres $minDistance et $maxDistance. Le paramètre $minDistance garantit que les documents renvoyés se trouvent à au moins 1 000 mètres du point spécifié, tandis que le paramètre $maxDistance limite les résultats aux emplacements qui ne se trouvent pas à plus de 5 000 mètres.

Le document est affiché dans la sortie avec un emplacement dans un mètre spécifié à partir du point avec les coordonnées données :

Exemple 4 : Utilisation de l'opérateur de requête $geoWithin

Ensuite, nous avons l'opérateur $geoWithin dans MongoDB qui est utilisé pour les requêtes géospatiales afin de trouver les documents qui se trouvent complètement dans une forme spécifiée telle qu'un cercle. Faisons la démonstration suivante de la requête $geoWithin :

db.area.find({emplacement :

{ $geoDans :

{ $centerSphere : [ [ - 60.93414657 , 30.82302903 ], 3 / 3963.2 ] } } })

Dans l'exemple, nous utilisons l'opérateur $geoWithin pour rechercher les documents de la collection « area » dans une certaine zone circulaire sur une sphère 2D. Pour cela, nous spécifions l'opérateur $centerSphere à l'intérieur de l'opérateur $geoWithin qui prend les deux arguments comme point central, qui représente probablement le point de coordonnées ici, et le rayon du cercle qui représente la valeur de distance en miles.

Le document résultant est récupéré comme suit et représente un point géospatial qui se situe dans le cercle défini par le point central donné et le rayon d'environ 3 miles :

Exemple 5 : Utilisation de l'opérateur de requête $geoNear

De plus, l'opérateur $geoNear est également un opérateur géospatial utilisé pour le pipeline d'agrégation. Il effectue une requête géospatiale et renvoie les documents triés en fonction de leur proximité avec un point spécifié. Ici, nous avons donné l'opérateur $geoNear qui est appelé à l'intérieur du pipeline d'agrégation.

db.area.aggregate([
{
$geoNear : {
près de : { tapez : 'Indiquer' , coordonnées : [ - 60.99279 , 30.719296 ] },
Champ distance : 'dist.calculé' ,
Distance maximale : 2 ,
requête : { catégorie : 'Jardin' },
inclure des Locs : 'dist.emplacement' ,
sphérique : vrai
}
}
])

Dans l'exemple, nous appelons la méthode d'agrégation de MongoDB et définissons l'opérateur $geoNear à l'intérieur. L'opérateur $geoNear est défini avec plusieurs paramètres pour spécifier le comportement de la requête. Tout d’abord, nous définissons le paramètre « proche » qui fournit les valeurs « coordonnées » comme point de référence pour la recherche.

Ensuite, nous utilisons le paramètre « distanceField » pour spécifier le champ fourni comme champ de résultat. Ce champ de résultat défini stocke la distance entre chaque document et le point de référence. Ensuite, nous définissons le paramètre « maxDistance » avec la valeur « 2 » qui représente la distance maximale en mètres.

Après cela, nous avons le paramètre « requête » qui filtre les documents par le champ « catégorie » et ne considère que les documents dont la « catégorie » est « Parcs ». Nous appelons ensuite le paramètre « includeLocs » pour contenir les informations de localisation. Nous précisons enfin le paramètre « sphérique » avec la valeur « vraie » qui calcule les distances à l'aide d'un système de coordonnées sphériques 2D.

Le pipeline d'agrégation représente le document dans la sortie qui affiche les informations par rapport au paramètre en conséquence. Le champ « dist.calculated » suivant affiche la distance de chaque document par rapport au point de référence :

Conclusion

Nous avons appris que les capacités géospatiales de MongoDB nous aident à gérer et à interroger efficacement les informations basées sur la localisation. Nous avons appris l'implémentation de la fonctionnalité géospatiale en utilisant ses différents opérateurs avec l'exemple de programme. Nous disposons de nombreuses autres fonctionnalités et méthodes qui sont également bénéfiques pour un large éventail d’applications.