web-dev-qa-db-fra.com

Comment stocker des informations géospatiales dans mongoDB

Selon la documentation de mongoDB ( link ) Si vous souhaitez stocker des informations géospatiales dans un champ de document, vous avez deux options, un tableau ou un document incorporé, et l'ordre doit toujours être la longitude, latitude. 

Si je veux utiliser un document incorporé, comment puis-je m'assurer de l'ordre du champ?

Ou les champs du document incorporé doivent-ils avoir un nom spécifique?

26
José Luis

avec un document incorporé, quel que soit le nom du champ du document incorporé, le premier champ doit contenir la valeur de longitude et le second champ doit contenir la valeur de latitude. Par exemple:

 db.zips2.insert( { _id: 1, city: "b", loc: { x: -73.974, y: 40.764 } } )
 db.zips2.insert( { _id: 2, city: "b", loc: { x: -73.981, y: 40.768 } } )

Ici, le champ x serait la longitude; et le champ y serait la latitude.

Cordialement

31
Kay

Index géospatial 2D, données de localisation des magasins

"Tous les documents doivent stocker les données de localisation dans le même ordre. Si vous utilisez la latitude et la longitude comme système de coordonnées, stockez toujours la longitude en premier. Les opérateurs d'index sphériques 2d de MongoDB ne reconnaissent que l'ordre [longitude, latitude]."

Voici un bon article sur les requêtes géospatiales dans MongoDB au cas où vous en auriez besoin.

31
Andy Refuerzo

Je vous conseillerais de nommer votre champ: x and y, au lieu de longitude/latitude, car après une mise à jour, la longitude et la latitude seront réorganisées de manière alphabétique, donc inversées.

5
emilie zawadzki

Les index géospatiaux nous permettent de trouver des éléments en fonction de leur emplacement géographique. 

Nous avons 2 options: 

  • 2D
  • 3D

En 2D, nous avons un plan cartésien avec les coordonnées x & y et un tas d'objets différents.


 2D cartesian plane


Le document doit stocker une sorte de x, y emplacement avec ensureIndex({'location':'2d', 'type':1}).

L'option type (facultatif) spécifie la direction de l'index, à savoir ascendante ou descendante. Ce peut être un index composé. 

Exemple d'utilisation:

Pour trouver des lieux proches, utilisez la commande:

db.collectionName.find({location: {$near:[x,y]}})

En pratique, cela est souvent utilisé à travers une limit. Pour limiter les résultats à 20 append .limit(20).

db.collectionName.find({location: {$near:[x,y]}}).limit(20)
2
student

La documentation MongoDB indiquait ce qui suit:

Un champ nommé coordonnées qui spécifie les coordonnées de l’objet . Si vous spécifiez les coordonnées de latitude et de longitude, indiquez longitude en premier puis en latitude:

Les valeurs de longitude valides sont comprises entre -180 et 180, les deux valeurs incluses .. .. Les valeurs de latitude valides sont comprises entre -90 et 90 (les deux valeurs incluses).

Documentation officielle de MongoDB: https://docs.mongodb.com/manual/geospatial-queries/#geospatial-indexes

1
Isaac Peraza Leon