Ejemplos de consultas de geolocalización de MongoDB

Ejemplos de consultas de geolocalización de MongoDB

  • Orquestación
6 min de lectura Actualizado Feb 7, 2019

Puntos clave: Las características de geolocalización de MongoDB Permite un almacenamiento y consulta eficiente de datos de ubicación utilizando el formato GeoJSON. La guía proporciona ejemplos para consultar puntos y áreas, importar datos y crear índices, utilizando los métodos de consulta espacial de MongoDB.

  • Los datos de geolocalización se están almacenados usando el formato GeoJSON.
  • Ejemplos incluyen consultar puntos y polígonos con MongoDB.

Aquí explicamos cómo consultar y trabajar con datos de geolocalización en MongoDB. GeoJSON está un estándar universalmente aceptado para representar una ubicación por su latitud y longitud, es decir, coordenadas. MongoDB utiliza la misma sintaxis que usarían el Servicio Geológico de EE. UU. u otras personas que trabajan con mapas. Por ejemplo, un punto simple se está representado así:

    "location" : {
		"type" : "Point",
		"coordinates" : [
			-72.7738706,
			41.6332836
		]
	}

En el globo, la longitud < 0 significa al oeste de Greenwich, Inglaterra, por convención. Los números > 0 son al este. Para recordar qué están cuáles, piensa en las líneas de longitud como largas, ya que van desde el Norte hasta el Polo Sur. Esto están un arco de 180 grados. Por convención están están dividido en dos arcos de 90 grados cada uno. Norte están positivo y Sur negativo. La latitud está el círculo que da la Tierra 360 grados completos. Por convención, esto oscila entre -180 (Oeste) y 180 (Este) grados. El ecuador está el punto donde la latitud está 0. Ten en cuenta que tú puedes utilizar Google Maps y señalar una ubicación en un mapa, hacer clic derecho con el ratón y seleccionar ¿Qué hay aquí" y te da la longitud y la latitud. Pero lo da al revés respecto a la convención, dando la latitud primero y la longitud segunda. Ten en cuenta también que, mientras los marineros utilizan grados (°), minutos (") y segundos ('), basados en el número 360, GeoJSON utiliza el sistema decimal base 10, que es obviamente más fácil de manejar al hacer cálculos. Con GeoJSON te puedes representar un área, en lugar de un punto, dibujando cualquier número de segmentos de línea alrededor de esta manera, lo que se está llamado polígono, aunque esto no significa que tenga que tener 5 caras, como están las clases universitarias de geometría de un polígono. Cada par de coordenadas en un polígono de GeoJSON está un segmento de línea. Así:

    location: {
      type: "Polygon",
       coordinates:
 [ [ -73.564453125, 41.178653972331674 ],
   [ -71.69128417968749, 41.178653972331674 ],
   [ -71.69128417968749, 42.114523952464246 ],
   [ -73.564453125, 42.114523952464246 ],
   [ -73.564453125, 41.178653972331674 ]
   ]]
}

MongoDB está muy adecuado para almacenar datos de geolocalización porque proporciona puntos, polígonos y otros objetos de geolocalización, así como métodos de consulta integrados para consultar datos basados en su proximidad a un punto en un mapa, dentro de cierta distancia de ese punto o dentro de líneas dibujadas alrededor de esa ubicación. Lo ilustramos utilizando datos proporcionados por el Ayuntamiento de Fairfield y otros municipios de Connecticut y ensamblados por OpenAddresses. (La licencia completa está aquí.) Descarga los datos desde aquí. Luego descomprime:

    tar xvfz ct.json.tar

Luego cárgalo en una instancia de MongoDB así, donde geo están la base de datos y la dirección están la colección:

    mongoimport --db geo --collection address --file ct.csv.json

Ahora, podemos utilizar esta herramienta ingeniosa para dibujar un mapa alrededor de una ubicación determinada y generará un polígono en formato GeoJSON. Fíjate en el gráfico de abajo que, dado que Connecticut están aproximadamente un rectángulo, podemos dibujar un rectángulo de tamaño suficiente para Define aproximadamente la ubicación de Connecticut.

Escribe mongo para abrir la shell de MongoDB y luego muestra un registro como se muestra a continuación y no las coordenadas como un tipo Punto:

    db.address.findOne()
{
	"_id" : ObjectId("5c55b6b46c6e2fc66db81675"),
	"state" : "CT",
	"postcode" : "06037",
	"street" : "Parish Dr",
	"district" : "",
	"unit" : "",
	"location" : {
		"type" : "Point",
		"coordinates" : [
			-72.7738706,
			41.6332836
		]
	},
	"region" : "Hartford",
	"number" : "51",
	"city" : "Berlin"
}

Ahora Crea un índice. Utilizamos el parámetro 2desfera, lo que significa que queremos utilizar puntos en una esfera y no en un plano euclidiano, es decir, plano. De ese modo, cuando trabajamos con distancias, MongoDB tiene en cuenta la curvatura de la Tierra:

    db.address.createIndex( { "location": "2dsphere"} )

Ahora busquemos direcciones situadas a menos de 4 metros de las coordenadas que se muestran a continuación usando el operador $near :

    db.address.find ({
  location: {
     $near: {
       $geometry: {
          type: "Point" ,
          coordinates: [ -72.7738706,41.6332836 ]
       },
       $maxDistance: 4,
       $minDistance: 0
     }
   }
})

Ahora busquemos todas las direcciones dentro del cuadrado que define Connecticut que dibujamos arriba usando $geoWithin. Ten en cuenta que te tienes que poner un conjunto extra de corchetes alrededor de los pares de coordenadas o MongoDB se quejará de que eso no están un Array. Ten en cuenta por convención que el primer y el último segmento de línea son igual. Por eso hacen falta 5 líneas para Define y no 4, como te pensaría.

    db.address.find ({location: 
     {$geoWithin:
       {$geometry: {
       type: "Polygon",
       coordinates:
 [[ [ -73.564453125, 41.178653972331674 ],
   [ -71.69128417968749, 41.178653972331674 ],
   [ -71.69128417968749, 42.114523952464246 ],
   [ -73.564453125, 42.114523952464246 ],
   [ -73.564453125, 41.178653972331674 ]
   ]]
}}}});

Y dado que Mongo entiende JavaScript, podemos Define Connecticut así:

    var connecticut = db.address.find ({location:
     {$geoWithin:
       {$geometry: {
       type: "Polygon",
       coordinates:
 [[ [ -73.564453125, 41.178653972331674 ],
   [ -71.69128417968749, 41.178653972331674 ],
   [ -71.69128417968749, 42.114523952464246 ],
   [ -73.564453125, 42.114523952464246 ],
   [ -73.564453125, 41.178653972331674 ]
   ]]
}}}});

Así que son 918.356 direcciones allí:

    connecticut.count()
918356

Guía de MongoDB

  1. Resumen de MongoDB: Empezando con MongoDB
  2. Cómo instalar MongoDB en Ubuntu y Mac
  3. Creación de una base de datos en MongoDB
  4. Comandos básicos de MongoDB Shell
  5. MongoDB Compass: Uso de la interfaz gráfica de Mongo
  6. Explicación del Control de Acceso Basado en Roles (RBAC) de MongoDB
  7. Explicación de los operadores de proyección y proyección de MongoDB
  8. Explicación de las funciones agregadas de MongoDB
  9. Ordenación de MongoDB: método y ejemplos de sort()
  10. Uso de operadores de Push & Pull en MongoDB
  11. Cómo utiliza MongoDB $unwind
  12. 23 operadores comunes de consultas de MongoDB y cómo utilizarlos
  13. Ejemplos de consultas de geolocalización de MongoDB
  14. Introducción a las transacciones de MongoDB
  15. Índices de MongoDB: Principales tipos de índices y cómo gestionarlos
  16. Mejores comandos de MongoDB te necesitas saber
  17. Replicación de MongoDB: Una introducción completa
  18. Cómo configurar un clúster de MongoDB
  19. Fragmentos de MongoDB: Conceptos, Ejemplos y Tutoriales
  20. MongoDB Atlas: Configuración y uso de MongoDB gestionado
  21. Cómo ejecutar MongoDB como contenedor Docker
  22. Uso, gestión y requisitos de memoria de MongoDB
  23. Cómo utilizar Mongodump para copias de seguridad de MongoDB
  24. Ejemplos de Mongorestore para restaurar copias de seguridad de MongoDB
  25. Cómo utilizar PyMongo
  26. Cómo utilizar Mongoose para MongoDB y NodeJS
  27. Chuletas de MongoDB
  28. MongoDB vs Cassandra: Comparación de bases de datos NoSQL
  29. PostgreSQL vs MongoDB: Comparando bases de datos
  30. MySQL vs MongoDB: Comparando bases de datos
  31. Certificaciones MongoDB: Una introducción

Estas publicaciones son mías y no representan necesariamente la posición, estrategias u opinión de BMC.

Más de Orquestación

Suscríbete al Informe

Al registrarse para esta oferta te son confirmar que te leído y aceptado la Política de Privacidad de BMC.

Gracias te

Tú te has suscrito a The Brief
El Brief abarca la orquestación de mainframe y empresa—BMC AMI y Control-M—y la investigación de analistas, despliegues de clientes y eventos en ambas áreas.