Ce chapitre présente la manière dont MongoDB stocke les données géospatiales. Afin de profiter de la fonctionnalité de requête géospatiale de MongoDB, nous devons d'abord comprendre comment stocker les données géospatiales.

Les données géospatiales se composent principalement de points, de lignes et de formes géométriques.

Un point sur une carte est défini par ses coordonnées de longitude et de latitude. Plusieurs points forment une ligne, et plusieurs lignes peuvent former diverses formes.

Dans des applications pratiques : L'emplacement d'un magasin, "Où suis-je ?", et "Où se trouve l'école ?" peuvent tous être représentés en utilisant des coordonnées. Décrire l'étendue d'un campus ou d'un centre commercial nécessite des formes géométriques.

Objet GeoJSON

MongoDB utilise des objets GeoJSON pour représenter des informations géospatiales.

Les types courants de GeoJSON comprennent :

  • Point - représentant un point de coordonnées
  • LineString - représentant une ligne
  • Polygon - représentant un polygone

Le format de stockage des objets GeoJSON dans les champs MongoDB est le suivant :

<champ>: { type: <type GeoJSON>, coordonnées: <coordonnées> }

Explication :

  • - Nom du champ
  • type - Type GeoJSON
  • coordonnées - Un tableau de points de coordonnées. Le format varie selon les différents types GeoJSON.

Exemple :

emplacement: {
     type: "Point",  // type de données géospatiales, dans ce cas, il s'agit d'un point de coordonnées
     coordonnées: [-73.856077, 40.848447] // longitude, latitude
}

Explication : Le champ emplacement stocke des données géospatiales du type point de coordonnées.

Point de Coordonnées (Point)

Format :

{ type: "Point", coordonnées: [ longitude, latitude ] }

Exemple :

{ type: "Point", coordonnées: [ 40, 5 ] }

Ligne (LineString)

Format :

{ type: "LineString", coordonnées: [ point1, point2, ...] }

Exemple :

{ type: "LineString", coordonnées: [ [ 40, 5 ], [ 41, 6 ] ] }

Polygone

Peut être composé d'une ou de plusieurs lignes. Format :

{
  type: "Polygon",
  coordonnées: [ 
		ligne1,
		ligne2,
		....
	]
}

Remarque : Les coordonnées de début et de fin de chaque segment de ligne doivent être identiques pour former une forme fermée.

Forme Composée d'un Seul Segment de Ligne

{
  type: "Polygon",
  coordonnées: [
  		[ [ 0 , 0 ] , [ 3 , 6 ] , [ 6 , 1 ] , [ 0 , 0  ] ] // Points de coordonnées du segment de ligne, notez que les premières et dernières coordonnées sont les mêmes.
	]
}

Forme Composée de Multiples Segments de Ligne

{
  type: "Polygon",
  coordonnées: [
     [ [ 0 , 0 ] , [ 3 , 6 ] , [ 6 , 1 ] , [ 0 , 0 ] ], // Segment de ligne 1
     [ [ 2 , 2 ] , [ 3 , 3 ] , [ 4 , 2 ] , [ 2 , 2 ] ]  // Segment de ligne 2
  ]
}

Index Géospatial

MongoDB prend en charge deux types d'index géospatiaux pour accélérer la requête de données GeoJSON.

2dsphere

Il s'agit d'un type d'index de géométrie sphérique, ce qui signifie que lors du calcul de la distance entre deux points, 2dsphere considère la terre comme une sphère.

Exemple de création d'un index 2dsphere :

db.collection.createIndex( { emplacement : "2dsphere" } )

Crée un index pour le champ emplacement.

2d

2D est un type de géométrie plane utilisé pour calculer la distance entre deux points comme s'ils étaient dans un plan. Exemple de création d'un index 2D :

db.collection.createIndex( { emplacement : "2d" } )

Cela crée un index pour le champ emplacement.

Types de Requêtes Géospatiales

Les requêtes géospatiales sont toutes liées à des calculs géométriques. Voici les types de requêtes pris en charge par MongoDB :

  • $geoIntersects - Utilisé pour faire correspondre des documents avec une intersection de forme géométrique spécifique.
  • $geoWithin - Correspond à des documents contenus dans une zone géométrique spécifiée.
  • $near - Généralement utilisé pour interroger les documents les plus proches d'un point de coordonnées spécifié.

Remarque : Pour plus d'informations sur les requêtes géospatiales, veuillez vous référer aux chapitres suivants.