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
- Resumen de MongoDB: Empezando con MongoDB
- Cómo instalar MongoDB en Ubuntu y Mac
- Creación de una base de datos en MongoDB
- Comandos básicos de MongoDB Shell
- MongoDB Compass: Uso de la interfaz gráfica de Mongo
- Explicación del Control de Acceso Basado en Roles (RBAC) de MongoDB
- Explicación de los operadores de proyección y proyección de MongoDB
- Explicación de las funciones agregadas de MongoDB
- Ordenación de MongoDB: método y ejemplos de sort()
- Uso de operadores de Push & Pull en MongoDB
- Cómo utiliza MongoDB $unwind
- 23 operadores comunes de consultas de MongoDB y cómo utilizarlos
- Ejemplos de consultas de geolocalización de MongoDB
- Introducción a las transacciones de MongoDB
- Índices de MongoDB: Principales tipos de índices y cómo gestionarlos
- Mejores comandos de MongoDB te necesitas saber
- Replicación de MongoDB: Una introducción completa
- Cómo configurar un clúster de MongoDB
- Fragmentos de MongoDB: Conceptos, Ejemplos y Tutoriales
- MongoDB Atlas: Configuración y uso de MongoDB gestionado
- Cómo ejecutar MongoDB como contenedor Docker
- Uso, gestión y requisitos de memoria de MongoDB
- Cómo utilizar Mongodump para copias de seguridad de MongoDB
- Ejemplos de Mongorestore para restaurar copias de seguridad de MongoDB
- Cómo utilizar PyMongo
- Cómo utilizar Mongoose para MongoDB y NodeJS
- Chuletas de MongoDB
- MongoDB vs Cassandra: Comparación de bases de datos NoSQL
- PostgreSQL vs MongoDB: Comparando bases de datos
- MySQL vs MongoDB: Comparando bases de datos
- Certificaciones MongoDB: Una introducción
Estas publicaciones son mías y no representan necesariamente la posición, estrategias u opinión de BMC.